asterix_parser 0.1.1

Playground do Protocolo ASTERIX
Documentation
use std::any::Any;
    
trait Foo: Any {
    fn as_any(&self) -> &dyn Any;
}

impl<T: Any> Foo for T {
    fn as_any(&self) -> &dyn Any {
        self
    }
}

struct Bar {
    name: String
}

struct Baz {
    other_name: String
}

impl PartialEq for dyn Foo {
    fn eq(&self, other: &dyn Foo) -> bool {
        let me = self.as_any();
        let you = other.as_any();
        if me.is::<Bar>() && you.is::<Bar>() {
            true
        } else if me.is::<Baz>() && you.is::<Baz>() {
            true
        } else {
            false
        }
    }
}

#[test]
pub fn test_dyn_any() {
    let bar: Bar = Bar { name: "Bar".to_string() };
    let baz: Baz = Baz { other_name: "Baz".to_string()};
    let foo1: &dyn Foo = &bar;
    let foo2: &dyn Foo = &baz;
    println!("{:?}", foo1 == foo2);

    let x = vec!["A", "B"];
    for y in x {
        println!("{}", y)
    }

    let vector = vec![foo1, foo2];
    for z in vector  {
        let w = z.as_any();
        if w.is::<Bar>() {
            let x = w.downcast_ref::<Bar>().unwrap();
            println!("Bar name is {}", x.name);
        } else {
            let y = w.downcast_ref::<Baz>().unwrap();
            println!("Baz name is {}", y.other_name);
        }
    }
}