Attribute Macro deltastruct::deltastruct [−][src]
#[deltastruct]
An attribute macro applied to mod
s. Will generate a Delta and it's DeltaStruct<_>
implementation.
Applied to a mod
. Expects the mod
to have a struct
with the same name
and an implementation. Currently at least one field is expected in the struct
definition and at least one method is expected in the implementation. This macro
will generate an enum
with the same name as the mod with Delta
appended,
and an implementation impl DeltaStruct<FooDelta> for Foo
.
The delta will have a tuple variant for each method defined for the struct
converted to camel case, and it's tuple will be of the same type as the
argument list of it's respective method (without &mut self
). It will also
expose delta functions of it's fields.
Example:
#[deltastruct] mod Foo { struct Foo { x : i32, y : i32 } impl Foo { fn swap(&mut self) { let tmp = self.x; self.x = self.y; self.y = tmp; } fn do_stuff(&mut self, n : f64) { self.x = (n * (self.x as f64)) as i32; } } }
will generate:
enum FooDelta { Swap(), DoStuff(f64), X(i32Delta), Y(i32Delta), } impl DeltaStruct<FooDelta> for Foo { fn apply(&mut self, delta : &FooDelta) { /* ... */ } }