mirror of
https://github.com/YGGverse/ggemini.git
synced 2026-03-31 17:15:31 +00:00
remove option wrapper from callbacks
This commit is contained in:
parent
4ab83702e9
commit
3e8da1725c
1 changed files with 10 additions and 21 deletions
|
|
@ -25,7 +25,7 @@ use glib::{Bytes, Priority};
|
||||||
/// * recursively read all bytes from `InputStream` for `SocketConnection` according to `bytes_in_chunk` argument
|
/// * recursively read all bytes from `InputStream` for `SocketConnection` according to `bytes_in_chunk` argument
|
||||||
/// * calculates total bytes length on every chunk iteration, validate sum with `bytes_total_limit` argument
|
/// * calculates total bytes length on every chunk iteration, validate sum with `bytes_total_limit` argument
|
||||||
/// * stop reading `InputStream` with `Result` on zero bytes in chunk received
|
/// * stop reading `InputStream` with `Result` on zero bytes in chunk received
|
||||||
/// * applies optional callback functions:
|
/// * applies callback functions:
|
||||||
/// * `on_chunk` - return reference to [Bytes](https://docs.gtk.org/glib/struct.Bytes.html) and `bytes_total` collected for every chunk in reading loop
|
/// * `on_chunk` - return reference to [Bytes](https://docs.gtk.org/glib/struct.Bytes.html) and `bytes_total` collected for every chunk in reading loop
|
||||||
/// * `on_complete` - return `MemoryInputStream` on success or `Error` on failure as `Result`
|
/// * `on_complete` - return `MemoryInputStream` on success or `Error` on failure as `Result`
|
||||||
pub fn from_socket_connection_async(
|
pub fn from_socket_connection_async(
|
||||||
|
|
@ -34,8 +34,8 @@ pub fn from_socket_connection_async(
|
||||||
priority: Priority,
|
priority: Priority,
|
||||||
bytes_in_chunk: usize,
|
bytes_in_chunk: usize,
|
||||||
bytes_total_limit: usize,
|
bytes_total_limit: usize,
|
||||||
on_chunk: Option<impl Fn((&Bytes, &usize)) + 'static>,
|
on_chunk: impl Fn((&Bytes, &usize)) + 'static,
|
||||||
on_complete: Option<impl FnOnce(Result<MemoryInputStream, (Error, Option<&str>)>) + 'static>,
|
on_complete: impl FnOnce(Result<MemoryInputStream, (Error, Option<&str>)>) + 'static,
|
||||||
) {
|
) {
|
||||||
read_all_from_socket_connection_async(
|
read_all_from_socket_connection_async(
|
||||||
MemoryInputStream::new(),
|
MemoryInputStream::new(),
|
||||||
|
|
@ -56,7 +56,6 @@ pub fn from_socket_connection_async(
|
||||||
/// Asynchronously read [InputStream](https://docs.gtk.org/gio/class.InputStream.html)
|
/// Asynchronously read [InputStream](https://docs.gtk.org/gio/class.InputStream.html)
|
||||||
/// from [SocketConnection](https://docs.gtk.org/gio/class.SocketConnection.html)
|
/// from [SocketConnection](https://docs.gtk.org/gio/class.SocketConnection.html)
|
||||||
/// to given [MemoryInputStream](https://docs.gtk.org/gio/class.MemoryInputStream.html).
|
/// to given [MemoryInputStream](https://docs.gtk.org/gio/class.MemoryInputStream.html).
|
||||||
/// Applies optional `on_chunk` and `on_complete` callback functions.
|
|
||||||
///
|
///
|
||||||
/// Useful to create dynamically allocated, memory-safe buffer
|
/// Useful to create dynamically allocated, memory-safe buffer
|
||||||
/// from remote connections, where final size of target data could not be known by Gemini protocol restrictions.
|
/// from remote connections, where final size of target data could not be known by Gemini protocol restrictions.
|
||||||
|
|
@ -71,7 +70,7 @@ pub fn from_socket_connection_async(
|
||||||
/// * recursively read all bytes from `InputStream` for `SocketConnection` according to `bytes_in_chunk` argument
|
/// * recursively read all bytes from `InputStream` for `SocketConnection` according to `bytes_in_chunk` argument
|
||||||
/// * calculates total bytes length on every chunk iteration, validate sum with `bytes_total_limit` argument
|
/// * calculates total bytes length on every chunk iteration, validate sum with `bytes_total_limit` argument
|
||||||
/// * stop reading `InputStream` with `Result` on zero bytes in chunk received, otherwise continue next chunk request in loop
|
/// * stop reading `InputStream` with `Result` on zero bytes in chunk received, otherwise continue next chunk request in loop
|
||||||
/// * applies optional callback functions:
|
/// * applies callback functions:
|
||||||
/// * `on_chunk` - return reference to [Bytes](https://docs.gtk.org/glib/struct.Bytes.html) and `bytes_total` collected for every chunk in reading loop
|
/// * `on_chunk` - return reference to [Bytes](https://docs.gtk.org/glib/struct.Bytes.html) and `bytes_total` collected for every chunk in reading loop
|
||||||
/// * `on_complete` - return `MemoryInputStream` on success or `Error` on failure as `Result`
|
/// * `on_complete` - return `MemoryInputStream` on success or `Error` on failure as `Result`
|
||||||
pub fn read_all_from_socket_connection_async(
|
pub fn read_all_from_socket_connection_async(
|
||||||
|
|
@ -82,8 +81,8 @@ pub fn read_all_from_socket_connection_async(
|
||||||
bytes_in_chunk: usize,
|
bytes_in_chunk: usize,
|
||||||
bytes_total_limit: usize,
|
bytes_total_limit: usize,
|
||||||
bytes_total: usize,
|
bytes_total: usize,
|
||||||
on_chunk: Option<impl Fn((&Bytes, &usize)) + 'static>,
|
on_chunk: impl Fn((&Bytes, &usize)) + 'static,
|
||||||
on_complete: Option<impl FnOnce(Result<MemoryInputStream, (Error, Option<&str>)>) + 'static>,
|
on_complete: impl FnOnce(Result<MemoryInputStream, (Error, Option<&str>)>) + 'static,
|
||||||
) {
|
) {
|
||||||
socket_connection.input_stream().read_bytes_async(
|
socket_connection.input_stream().read_bytes_async(
|
||||||
bytes_in_chunk,
|
bytes_in_chunk,
|
||||||
|
|
@ -95,24 +94,16 @@ pub fn read_all_from_socket_connection_async(
|
||||||
let bytes_total = bytes_total + bytes.len();
|
let bytes_total = bytes_total + bytes.len();
|
||||||
|
|
||||||
// Callback chunk function
|
// Callback chunk function
|
||||||
if let Some(ref callback) = on_chunk {
|
on_chunk((&bytes, &bytes_total));
|
||||||
callback((&bytes, &bytes_total));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validate max size
|
// Validate max size
|
||||||
if bytes_total > bytes_total_limit {
|
if bytes_total > bytes_total_limit {
|
||||||
if let Some(callback) = on_complete {
|
return on_complete(Err((Error::BytesTotal, None)));
|
||||||
callback(Err((Error::BytesTotal, None)));
|
|
||||||
}
|
|
||||||
return; // break
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// No bytes were read, end of stream
|
// No bytes were read, end of stream
|
||||||
if bytes.len() == 0 {
|
if bytes.len() == 0 {
|
||||||
if let Some(callback) = on_complete {
|
return on_complete(Ok(memory_input_stream));
|
||||||
callback(Ok(memory_input_stream));
|
|
||||||
}
|
|
||||||
return; // break
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write chunk bytes
|
// Write chunk bytes
|
||||||
|
|
@ -132,9 +123,7 @@ pub fn read_all_from_socket_connection_async(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
Err(reason) => {
|
Err(reason) => {
|
||||||
if let Some(callback) = on_complete {
|
on_complete(Err((Error::InputStream, Some(reason.message()))));
|
||||||
callback(Err((Error::InputStream, Some(reason.message()))));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue