Skip to main content

StreamConverters

Struct StreamConverters 

Source
pub struct StreamConverters;
Expand description

Bridges between std::io::Read/Write and Datum byte streams. Mirrors Akka’s StreamConverters.

from_reader/to_writer adapt blocking readers/writers into a Source/Sink; as_input_stream/as_output_stream go the other way, materializing a blocking InputStreamHandle/OutputStreamHandle over a stream. All factory closures run at materialization, never at blueprint construction.

Implementations§

Source§

impl StreamConverters

Source

pub fn from_reader<F, R>(factory: F, chunk_size: usize) -> Source<Vec<u8>>
where F: Fn() -> Result<R> + Send + Sync + 'static, R: Read + Send + 'static,

Wraps any blocking std::io::Read as a Source<Vec<u8>> emitting up to chunk_size bytes per element.

factory is invoked at materialization and the reader is driven on the Datum thread pool, with a small bounded reader queue so a slow consumer backpressures the reader instead of buffering unboundedly. Read errors fail the stream. Panics if chunk_size == 0.

Source

pub fn to_writer<F, W>(factory: F) -> Sink<Vec<u8>, StreamCompletion<NotUsed>>
where F: Fn() -> Result<W> + Send + Sync + 'static, W: Write + Send + 'static,

Wraps any blocking std::io::Write as a Sink<Vec<u8>>, writing each upstream chunk in order.

factory runs at materialization. The writer is flushed exactly once — on completion or on error — and dropped afterwards; upstream errors are forwarded to the materialized StreamCompletion.

Source

pub fn as_input_stream( read_timeout: Duration, ) -> Sink<Vec<u8>, InputStreamHandle>

Creates a Sink which when materialized returns an InputStreamHandle that can be used to read the values produced by the stream this sink is attached to.

This sink bridges Datum streams to synchronous blocking code. The materialized handle implements std::io::Read: each read() call blocks the caller (up to read_timeout) until upstream produces a chunk, then copies as many bytes as possible into the provided buffer. Partial reads are supported — the handle retains any leftover bytes from a previous chunk and serves them on the next call.

EOF is signalled by read() returning Ok(0) when the stream completes. Stream errors surface as io::Error. Dropping the handle cancels the stream.

Matches Akka StreamConverters.asInputStream semantics.

Source

pub fn as_output_stream( write_timeout: Duration, ) -> Source<Vec<u8>, OutputStreamHandle>

Creates a Source which when materialized returns an OutputStreamHandle that can be used to write bytes into the stream.

This source is intended for inter-operation with blocking APIs. The materialized handle implements std::io::Write: each write() call blocks (up to write_timeout) until the stream has capacity, then produces one stream element from the written bytes. Backpressure is respected — writes block when the internal buffer is full.

flush() is a no-op. OutputStreamHandle::close() completes the stream (signals EOF to downstream). Dropping the handle cancels the stream.

Matches Akka StreamConverters.asOutputStream semantics.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Message for T
where T: Any + Send + 'static,

Source§

fn from_boxed(m: BoxedMessage) -> Result<Self, BoxedDowncastErr>

Convert a BoxedMessage to this concrete type
Source§

fn box_message(self, pid: &ActorId) -> Result<BoxedMessage, BoxedDowncastErr>

Convert this message to a BoxedMessage
Source§

impl<T> State for T
where T: Any + Send + 'static,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more