/** * Originally from Intertrait by CodeChain * * * * * Licensed under either of * * Apache License, Version 2.0 (LICENSE-APACHE or ) * MIT license (LICENSE-MIT or ) * at your option. */ use crate::libs::intertrait::{caster, CastFrom}; pub trait CastBox { /// Casts a box to this trait into that of type `T`. If fails, returns the receiver. fn cast(self: Box) -> Result, Box>; } /// A blanket implementation of `CastBox` for traits extending `CastFrom`. impl CastBox for S { fn cast(self: Box) -> Result, Box> { match caster::((*self).type_id()) { Some(caster) => Ok((caster.cast_box)(self.box_any())), None => Err(self), } } }