Module elicit::aelicit[][src]

aelicit.rs

Examples

#[macro_use] extern crate elicit;

aelicit_define!(aelicit_my_trait, MyTrait);
use self::aelicit_my_trait::Aelicit
    as MyTraitAelicit;
use self::aelicit_my_trait::WeakAelicit
    as MyTraitWeakAelicit;
use self::aelicit_my_trait::EnableAelicitFromSelf
    as MyTraitEnableAelicitFromSelf;
use self::aelicit_my_trait::EnableAelicitFromSelfField
    as MyTraitEnableAelicitFromSelfField;

pub trait MyTrait: ::std::fmt::Debug + MyTraitEnableAelicitFromSelf {
    fn my_function(&self) -> i32;
}

#[derive( Debug, )]
struct MyStruct {
    _eafsf:        MyTraitEnableAelicitFromSelfField,
    my_field:     i32,
}
impl MyTraitEnableAelicitFromSelf for MyStruct {
    enable_aelicit_from_self_delegate!(MyTrait,
                                       MyTraitAelicit,
                                       _eafsf);
}
impl MyTrait for MyStruct {
    fn my_function(&self) -> i32 { self.my_field }
}

#[derive( Debug, )]
struct MyStructUnuseEnableAelicitFromSelf {
    my_field:     i32,
}
impl MyTraitEnableAelicitFromSelf for MyStructUnuseEnableAelicitFromSelf {
    enable_aelicit_from_self_delegate!(MyTrait,
                                       MyTraitAelicit);
}
impl MyTrait for MyStructUnuseEnableAelicitFromSelf {
    fn my_function(&self) -> i32 { self.my_field }
}

fn main() {
    let my0 = MyTraitAelicit::new(MyStruct{
        _eafsf: MyTraitEnableAelicitFromSelfField::default(),
        my_field: 0i32,
    });
    let my1 = MyTraitAelicit::new(MyStructUnuseEnableAelicitFromSelf{
        my_field: 1i32,
    });
}