1 unstable release

0.3.1 Jan 25, 2021
0.0.1 Jan 25, 2021

#60 in #cow

41 downloads per month

MIT license

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
~34K SLoC