Module elicit::elicit [] [src]

elicit.rs

Examples

#[macro_use] extern crate elicit;

elicit_define!(elicit_my_trait, MyTrait);
use self::elicit_my_trait::Elicit
    as MyTraitElicit;
use self::elicit_my_trait::WeakElicit
    as MyTraitWeakElicit;
use self::elicit_my_trait::EnableElicitFromSelf
    as MyTraitEnableElicitFromSelf;
use self::elicit_my_trait::EnableElicitFromSelfField
    as MyTraitEnableElicitFromSelfField;

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

#[derive( Debug, )]
struct MyStruct {
    _eefsf:        MyTraitEnableElicitFromSelfField,
    my_field:     i32,
}
impl MyTraitEnableElicitFromSelf for MyStruct {
    enable_elicit_from_self_delegate!(MyTrait, MyTraitElicit, _eefsf);
}
impl MyTrait for MyStruct {
    fn my_function(&self) -> i32 { self.my_field }
}

#[derive( Debug, )]
struct MyStructUnuseEnableElicitFromSelf {
    my_field:     i32,
}
impl MyTraitEnableElicitFromSelf for MyStructUnuseEnableElicitFromSelf {
    enable_elicit_from_self_delegate!(MyTrait, MyTraitElicit);
}
impl MyTrait for MyStructUnuseEnableElicitFromSelf {
    fn my_function(&self) -> i32 { self.my_field }
}

fn main() {
    let my0 = MyTraitElicit::new(MyStruct{
        _eefsf: MyTraitEnableElicitFromSelfField::default(),
        my_field: 0i32,
    });
    let my1 = MyTraitElicit::new(MyStructUnuseEnableElicitFromSelf{
        my_field: 1i32,
    });
}