dyncast 0.1.0

Downcasting made easy
Documentation
use std::any::Any;

use dyncast::{dyncast, DyncastExt};

#[dyncast]
trait Boba {
    fn supper(&self) -> &'static str;
}

struct A;

#[dyncast]
impl Boba for A {
    fn supper(&self) -> &'static str {
        "a"
    }
}

struct B;

#[dyncast]
impl Boba for B {
    fn supper(&self) -> &'static str {
        "b"
    }
}

#[dyncast]
trait Soba {}

#[dyncast]
impl Soba for B {}

#[test]
fn boba() {
    let a = A;
    let b = B;

    let a = &a as &dyn Any;
    let b = &b as &dyn Any;

    assert!(a.dyncast_to::<dyn Boba>().is_some());
    assert_eq!(a.dyncast_to::<dyn Boba>().unwrap().supper(), "a");

    assert!(b.dyncast_to::<dyn Boba>().is_some());
    assert_eq!(b.dyncast_to::<dyn Boba>().unwrap().supper(), "b");

    assert!(a.dyncast_to::<dyn Soba>().is_none());
    assert!(b.dyncast_to::<dyn Soba>().is_some());
}