Crates.io | cow_struct |
lib.rs | cow_struct |
version | 0.0.1 |
source | src |
created_at | 2021-01-25 17:41:49.735199 |
updated_at | 2021-01-25 17:43:37.628538 |
description | Derive a struct with clone-on-write fields |
homepage | |
repository | https://github.com/lu-zero/cow_fields |
max_upload_size | |
id | 346554 |
size | 5,055 |
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.
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;
}
}
}
}