update api

This commit is contained in:
yggverse 2024-10-25 15:01:17 +03:00
parent 9793a67187
commit a8230bed37
9 changed files with 91 additions and 325 deletions

View file

@ -7,35 +7,40 @@ pub use error::Error;
pub use response::Response;
pub use socket::Socket;
use gio::Cancellable;
use glib::{Priority, Uri};
use glib::Uri;
/// High-level API to make async request, get `Response` and close connection.
pub fn request_async(
/// High-level API to make single async request
///
/// 1. open new socket connection for [Uri](https://docs.gtk.org/glib/struct.Uri.html)
/// 2. send request
/// 3. read response
/// 4. close connection
/// 5. return `Result<Response, Error>` to `callback` function
pub fn simple_socket_request_async(
uri: Uri,
cancelable: Option<Cancellable>,
priority: Option<Priority>,
callback: impl FnOnce(Result<Response, Error>) + 'static,
) {
// Create new socket connection
Socket::new().connect_async(
uri.clone(),
cancelable.clone(),
move |connect| match connect {
Ok(connection) => {
connection.request_async(uri, cancelable, priority, None, |request| {
callback(match request {
Ok(buffer) => match Response::from_utf8(&buffer) {
Ok(response) => Ok(response),
Err(_) => Err(Error::Response),
},
Err(_) => Err(Error::Request),
});
//connection.close_async(cancelable, priority, |_| {}); // @TODO
})
}
Err(_) => callback(Err(Error::Connection)),
},
);
Socket::new().connect_async(uri.clone(), None, move |connect| match connect {
Ok(connection) => {
connection.request_async(uri, None, None, None, move |connection, response| {
connection.close_async(
None,
None,
Some(|close| {
callback(match close {
Ok(_) => match response {
Ok(buffer) => match Response::from_utf8(&buffer) {
Ok(response) => Ok(response),
Err(_) => Err(Error::Response),
},
Err(_) => Err(Error::Request),
},
Err(_) => Err(Error::Close),
})
}),
);
})
}
Err(_) => callback(Err(Error::Connection)),
});
}