Struct round_based::dev::AsyncSimulation
source · [−]pub struct AsyncSimulation<SM: StateMachine> { /* private fields */ }Available on crate feature
dev only.Expand description
Emulates running protocol between local parties using AsyncProtocol
Takes parties (every party is instance of StateMachine) and executes protocol between them.
Compared to Simulation, AsyncSimulation requires tokio runtime and introduces parallelism, so it’s more suitable for writing tests (whereas Simulation is more suitable for writing benchmarks).
Limitations
- Doesn’t log process of protocol execution (except for occurring non critical errors). Limited by ProtocolWatcher API (to be expanded).
Example
let results: Vec<Result<Party::Output, _>> = AsyncSimulation::new()
.add_party(Party::new(1, 3))
.add_party(Party::new(2, 3))
.add_party(Party::new(3, 3))
.run()
.await;Implementations
sourceimpl<SM> AsyncSimulation<SM> where
SM: StateMachine + Send + 'static,
SM::MessageBody: Send + Clone + Unpin + 'static,
SM::Err: Send + Debug,
SM::Output: Send,
impl<SM> AsyncSimulation<SM> where
SM: StateMachine + Send + 'static,
SM::MessageBody: Send + Clone + Unpin + 'static,
SM::Err: Send + Debug,
SM::Output: Send,
sourcepub fn add_party(&mut self, party: SM) -> &mut Self
Available on crate feature async-runtime only.
pub fn add_party(&mut self, party: SM) -> &mut Self
async-runtime only.Adds protocol participant
sourcepub async fn run(&mut self) -> Vec<Result<SM::Output, AsyncSimulationError<SM>>>
Available on crate feature async-runtime only.
pub async fn run(&mut self) -> Vec<Result<SM::Output, AsyncSimulationError<SM>>>
async-runtime only.Runs a simulation
Returns
Returns Vec of execution results. Every party is executed independently, simulation will continue until each party finish protocol (either with success or error).
It’s an error to call this method twice. In this case,
vec![Err(AsyncSimulationError::Exhausted); n] is returned
Auto Trait Implementations
impl<SM> !RefUnwindSafe for AsyncSimulation<SM>
impl<SM> Send for AsyncSimulation<SM> where
SM: Send,
<SM as StateMachine>::MessageBody: Send,
impl<SM> !Sync for AsyncSimulation<SM>
impl<SM> Unpin for AsyncSimulation<SM> where
SM: Unpin,
impl<SM> !UnwindSafe for AsyncSimulation<SM>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more