dynprops 0.1.0

Creating and extending objects with typed dynamic properties
Documentation
use dynprops::*;
use static_init::dynamic;

struct Context {
    param: i32,
}

#[dynamic]
static CONTEXT: Subject<Context> = Subject::new();

#[dynamic]
static DOUBLE: DynInitProperty<'static, Context, i32> = CONTEXT
    .new_prop_fn_init(|context| context.value.param * 2)
    .into_dyn_init();

#[dynamic]
static SQUARE: DynInitProperty<'static, Context, i32> = CONTEXT
    .new_prop_fn_init(|context| context.value.param * context.value.param)
    .into_dyn_init();

#[dynamic]
static SQUARE_PLUS_DOUBLE: DynInitProperty<'static, Context, i32> = CONTEXT
    .new_prop_fn_init(|context| context[&SQUARE] + context[&DOUBLE])
    .into_dyn_init();

#[test]
fn test_static_init() {
    let obj = Extended::new_extend(Context { param: 5 }, &CONTEXT);
    assert_eq!(obj[&DOUBLE], 10);
    assert_eq!(obj[&SQUARE], 25);
    assert_eq!(obj[&SQUARE_PLUS_DOUBLE], 35);
}