#![ allow( unreachable_code, clippy::map_identity ) ]
use
{
futures :: { StreamExt } ,
async_nursery :: { Nursery, NurseryStream, Nurse, NurseExt } ,
async_executors :: { SpawnHandle, SpawnHandleExt, JoinHandle } ,
};
type DynResult<T> = Result<T, Box< dyn std::error::Error + Send + Sync + 'static >>;
pub struct Connection
{
nursery: Box< dyn Nurse< DynResult<()> > + Send > ,
_handle: JoinHandle<DynResult<()>> ,
}
impl Connection
{
pub fn new( exec: impl SpawnHandle<DynResult<()>> + Clone + Send + 'static ) -> DynResult<Self>
{
let (nursery, nursery_stream) = Nursery::new( exec.clone() );
let _handle = exec.spawn_handle( Self::listen_request_errors( nursery_stream ) )?;
Ok( Self
{
nursery: Box::new( nursery ) ,
_handle ,
})
}
async fn listen_request_errors( mut nursery_stream: NurseryStream< DynResult<()> > ) -> DynResult<()>
{
while let Some(res) = nursery_stream.next().await
{
let _ = res.map_err( |e| e );
}
Ok(())
}
pub fn process( &self ) -> DynResult<()>
{
let _disconnect = false;
while todo!() {
self.nursery.nurse( async { Ok(()) } )?;
if _disconnect { break }
}
Ok(())
}
}
#[ async_std::main ]
async fn main() -> DynResult<()>
{
Ok(())
}