use crate::{ import::* };
#[ derive( Debug ) ]
pub struct RtErr
{
inner: FailContext<RtErrKind>,
}
#[ derive( Clone, PartialEq, Eq, Debug, Fail ) ]
pub enum RtErrKind
{
#[ fail( display = "DoubleExecutorInit: Cannot initialize global executor twice" ) ]
DoubleExecutorInit,
#[ fail( display = "Spawn: Failed to spawn a future in: {}", context ) ]
Spawn
{
context: String
},
}
impl Fail for RtErr
{
fn cause( &self ) -> Option< &dyn Fail >
{
self.inner.cause()
}
fn backtrace( &self ) -> Option< &Backtrace >
{
self.inner.backtrace()
}
}
impl fmt::Display for RtErr
{
fn fmt( &self, f: &mut fmt::Formatter<'_> ) -> fmt::Result
{
fmt::Display::fmt( &self.inner, f )
}
}
impl RtErr
{
pub fn kind( &self ) -> &RtErrKind
{
self.inner.get_context()
}
}
impl From<RtErrKind> for RtErr
{
fn from( kind: RtErrKind ) -> RtErr
{
RtErr { inner: FailContext::new( kind ) }
}
}
impl From< FailContext<RtErrKind> > for RtErr
{
fn from( inner: FailContext<RtErrKind> ) -> RtErr
{
RtErr { inner }
}
}