pub struct AsyncProtocol<SM, I, O, W = BlindWatcher> { /* private fields */ }
Available on crate feature async-runtime only.
Expand description

Executes protocol in async environment using tokio backend

In the most simple setting, you just provide protocol initial state, stream of incoming messages, and sink for outgoing messages, and you’re able to easily execute it:

fn incoming() -> impl Stream<Item=Result<Msg<M>, Error>> + FusedStream + Unpin {
    // ...
}
fn outgoing() -> impl Sink<Msg<M>, Error=Error> + Unpin {
    // ...
}
let output: State::Output = AsyncProtocol::new(State::initial(), incoming(), outgoing())
    .run().await?;
// ...

Note that if the protocol has some cryptographical assumptions on transport channel (e.g. messages should be encrypted, authenticated), then stream and sink must meet these assumptions (e.g. encrypt, authenticate messages)

Implementations

Constructs new protocol executor from initial state, channels of incoming and outgoing messages

Sets new protocol watcher

Protocol watcher looks after protocol execution. See list of observable events in ProtocolWatcher trait.

Default watcher: BlindWatcher that does nothing with received events. For development purposes it’s convenient to pick StderrWatcher.

Get a reference to the inner state machine.

This is useful in case where you want to call any of the state machine’s methods.

Note that this could return an error if the state machine is missing, and that could only happen if the task/thread that is running the proceed call panicked.

Try to convert the protocol into the inner state machine.

Same as Self::state_machine_ref, but instead of returning a reference, it will take ownership of self and return the state machine, this useful in case when the protocol has been executed and you want to get the state machine back.

Executes the protocol

Returns protocol output or first occurred critical error

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.