mod common;
use
{
async_executors :: { AsyncStd } ,
async_nursery :: { Nursery, NurseExt } ,
common :: { DynSendResult, setup_tracing } ,
futures :: { TryStreamExt } ,
futures_timer :: { Delay } ,
std :: { time::Duration } ,
tracing_crate :: { info, error } ,
};
async fn return_error() -> DynSendResult<()>
{
let (nursery, mut output) = Nursery::new( AsyncStd ); info!( "nursery created" );
nursery.nurse( slow() )?;
nursery.nurse( wrong() )?;
drop(nursery);
while output.try_next().await?.is_some() {};
unreachable!( "drop Nursery and NurseryStream" );
}
async fn slow() -> DynSendResult<()>
{
info!( "spawned slow." );
Delay::new( Duration::from_secs(5) ).await;
error!( "I managed to stall you all." );
Ok(())
}
async fn wrong() -> DynSendResult<()>
{
info!( "spawned wrong." );
Err( "I don't like waiting.".into() )
}
#[ async_std::main ]
async fn main() -> DynSendResult<()>
{
setup_tracing();
let err = return_error().await;
assert!( err.is_err() );
Ok(())
}