Derive Macro dyn_context::State
source · [−]#[derive(State)]
{
// Attributes available to this derive:
#[state]
#[_crate]
}
Expand description
Derives State implementation for structs.
This derive macro allows easily combine
new State from several parts and inner States.
Supports #[state] attribute, which can be in any
of two forms: #[state], and #[state(part)].
First form, #[state], should be used to include
fields which type have implemented State trait as
an inner entry of building state. Second form, #[state(part)],
marks field as well as struct itself as a building state part,
i.e. an object accessible by its type through State / StateExt methods.
Example
struct StatePart(i32);
struct InnerState1(i32);
impl SelfState for InnerState1 { }
struct InnerInnerState(i32);
impl SelfState for InnerInnerState { }
#[derive(State)]
#[state(part)]
struct InnerState2 {
var: i32,
#[state(part)]
part: StatePart,
#[state]
inner_inner: InnerInnerState,
}
#[derive(State)]
struct RootState {
#[state]
inner_1: InnerState1,
#[state]
inner_2: InnerState2,
}
let part = StatePart(1);
let inner_1 = InnerState1(2);
let inner_inner = InnerInnerState(3);
let inner_2 = InnerState2 { var: 4, part, inner_inner };
let state = RootState { inner_1, inner_2 };
assert_eq!(state.get::<StatePart>().0, 1);
assert_eq!(state.get::<InnerState1>().0, 2);
assert_eq!(state.get::<InnerInnerState>().0, 3);
assert_eq!(state.get::<InnerState2>().var, 4);