diff options
| author | HampusM <hampus@hampusmat.com> | 2022-11-19 15:45:12 +0100 | 
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2022-11-19 15:45:12 +0100 | 
| commit | 9f27a925bd323e8e0864bedeb33a3c6953517ea1 (patch) | |
| tree | ea5d8faaed82c58fa037fa377173bb365e1cd697 /src/libs/intertrait/cast/box.rs | |
| parent | d99cbf9fa95856cbc14a3217e1cd3f13aeb2e0b3 (diff) | |
refactor: reorganize non-public API items
Diffstat (limited to 'src/libs/intertrait/cast/box.rs')
| -rw-r--r-- | src/libs/intertrait/cast/box.rs | 87 | 
1 files changed, 0 insertions, 87 deletions
| diff --git a/src/libs/intertrait/cast/box.rs b/src/libs/intertrait/cast/box.rs deleted file mode 100644 index fcd5f70..0000000 --- a/src/libs/intertrait/cast/box.rs +++ /dev/null @@ -1,87 +0,0 @@ -//! Originally from Intertrait by CodeChain -//! -//! <https://github.com/CodeChain-io/intertrait> -//! <https://crates.io/crates/intertrait/0.2.2> -//! -//! Licensed under either of -//! -//! Apache License, Version 2.0 (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>) -//! MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>) -//! -//! at your option. - -use std::any::type_name; - -use crate::libs::intertrait::cast::error::CastError; -use crate::libs::intertrait::{get_caster, CastFrom}; - -pub trait CastBox -{ -    /// Casts a `Box` with `Self` into a `Box` with `Dest`. -    fn cast<Dest: ?Sized + 'static>(self: Box<Self>) -> Result<Box<Dest>, CastError>; -} - -/// A blanket implementation of `CastBox` for traits extending `CastFrom`. -impl<CastFromSelf: ?Sized + CastFrom> CastBox for CastFromSelf -{ -    fn cast<Dest: ?Sized + 'static>(self: Box<Self>) -> Result<Box<Dest>, CastError> -    { -        let caster = -            get_caster::<Dest>((*self).type_id()).map_err(CastError::GetCasterFailed)?; - -        (caster.cast_box)(self.box_any()).map_err(|err| CastError::CastFailed { -            source: err, -            from: type_name::<Self>(), -            to: type_name::<Dest>(), -        }) -    } -} - -#[cfg(test)] -mod tests -{ -    use std::any::Any; -    use std::fmt::{Debug, Display}; - -    use super::*; -    use crate::test_utils::subjects; - -    #[test] -    fn can_cast_box() -    { -        let concrete_ninja = Box::new(subjects::Ninja); - -        let abstract_ninja: Box<dyn subjects::INinja> = concrete_ninja; - -        let debug_ninja_result = abstract_ninja.cast::<dyn Debug>(); - -        assert!(debug_ninja_result.is_ok()); -    } - -    #[test] -    fn cannot_cast_box_wrong() -    { -        let concrete_ninja = Box::new(subjects::Ninja); - -        let abstract_ninja: Box<dyn subjects::INinja> = concrete_ninja; - -        let display_ninja_result = abstract_ninja.cast::<dyn Display>(); - -        assert!(matches!( -            display_ninja_result, -            Err(CastError::GetCasterFailed(_)) -        )); -    } - -    #[test] -    fn can_cast_box_from_any() -    { -        let concrete_ninja = Box::new(subjects::Ninja); - -        let any_ninja: Box<dyn Any> = concrete_ninja; - -        let debug_ninja_result = any_ninja.cast::<dyn Debug>(); - -        assert!(debug_ninja_result.is_ok()); -    } -} | 
