1 unstable release
0.3.1 |
|
---|---|
0.0.1 | Jan 25, 2021 |
#63 in #cow
5KB
derive CowStruct
This crate consists in a procedural macro derive that provides a struct that is Cow and the impl to create one from the target struct.
Usage
use cow_struct::CowStruct;
#[derive(Debug, Default, CowStruct)]
struct A {
a: LargeStruct,
b: OtherLargeStruct,
c: AnotherOne,
...
z: YetAnother,
}
fn evaluation(cfg: &Config, state: &mut CowA) -> usize { ... }
fn foo() {
// original struct
let a = A::new();
let mut val = 0;
// similar struct, with all the fields set as Cow::Borrowed from a;
let mut cow = a.to_cow();
let mut cow_out = cow.to_cow();
let mut v_max = usize::min();
for cfg in inputs() {
// it is going to change cow, a remains untouched
let val = evaluation(cfg, &mut cow);
// let's pick the best candidate
for candidate in candidates_b(val) {
let mut cow2 = cow.to_cow();
let v = evaluation_b(candidate, &mut cow2);
if v > v_max {
v_max = v;
cow_out = cow2;
}
}
}
}
Dependencies
~1.5MB
~36K SLoC