dynex 0.1.1

Inherit and derive object-unsafe traits for dynamic Rust.
Documentation
use std::fmt::Debug;

#[macro_use]
extern crate dynex;

#[dyn_trait]
pub trait Meta: Debug + PartialEq + Clone + Add {}

#[test]
fn derive() {

    #[derive(Debug, PartialEq, Clone)]
    pub struct MetaImpl {
        name: String,
    }

    impl Meta for MetaImpl {}
    
    impl std::ops::Add for MetaImpl {
        type Output = MetaImpl;
    
        fn add(self, other: MetaImpl) -> MetaImpl {
            MetaImpl {
                name: format!("{}{}", self.name, other.name),
            }
        }
    }


    #[derive(Debug, Clone, PartialEqFix)]
    pub struct Bar {
        meta: Box<dyn Meta>,
    }

    impl std::ops::Add for Bar {
        type Output = Bar;
    
        fn add(self, other: Bar) -> Bar {
            Bar {
                meta: self.meta + other.meta,
            }
        }
    }


    let bar1 = Bar { meta: Box::new(MetaImpl { name: "foo".into() }) };
    let bar2 = Bar { meta: Box::new(MetaImpl { name: "bar".into() }) };
    assert_eq!(bar1, Bar { meta: Box::new(MetaImpl { name: "foo".into() }) });
    let bar3 = bar1 + bar2;
    println!("{:?}", bar3);
}