Skip to main content

CastRef

Trait CastRef 

Source
pub trait CastRef {
    // Required methods
    fn cast<T: ?Sized + 'static>(&self) -> Option<&T>;
    fn impls<T: ?Sized + 'static>(&self) -> bool;
}
Expand description

A trait that is blanket-implemented for traits extending CastFrom to allow for casting of a trait object for it behind an immutable reference to a trait object for another trait implemented by the underlying value.

§Examples

§Casting an immutable reference

use intertrait::cast::*;

impl Source for Data {}
let data = Data;
let source: &dyn Source = &data;
let greet = source.cast::<dyn Greet>();
greet.unwrap().greet();

§Testing if a cast is possible

use intertrait::cast::*;

impl Source for Data {}
let data = Data;
let source: &dyn Source = &data;
assert!(source.impls::<dyn Greet>());
assert!(!source.impls::<dyn std::fmt::Debug>());

Required Methods§

Source

fn cast<T: ?Sized + 'static>(&self) -> Option<&T>

Casts a reference to this trait into that of type T.

Source

fn impls<T: ?Sized + 'static>(&self) -> bool

Tests if this trait object can be cast into T.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<S: ?Sized + CastFrom> CastRef for S

A blanket implementation of CastRef for traits extending CastFrom.