use tokio_executor::park::{Park, Unpark}; use std::error::Error; use std::time::Duration; pub(crate) type BoxPark = Box + Send>; pub(crate) type BoxUnpark = Box; pub(crate) struct BoxedPark(T); impl BoxedPark { pub fn new(inner: T) -> Self { BoxedPark(inner) } } impl Park for BoxedPark where T::Error: Error, { type Unpark = BoxUnpark; type Error = (); fn unpark(&self) -> Self::Unpark { Box::new(self.0.unpark()) } fn park(&mut self) -> Result<(), Self::Error> { self.0.park().map_err(|e| { warn!( "calling `park` on worker thread errored -- shutting down thread: {}", e ); }) } fn park_timeout(&mut self, duration: Duration) -> Result<(), Self::Error> { self.0.park_timeout(duration).map_err(|e| { warn!( "calling `park` on worker thread errored -- shutting down thread: {}", e ); }) } }