lens-rs_derive

Crates.iolens-rs_derive
lib.rslens-rs_derive
version0.3.2
sourcesrc
created_at2021-03-20 05:34:19.250466
updated_at2021-05-07 17:27:37.607826
descriptionmacro to derive lens for data type
homepage
repositoryhttps://github.com/TOETOE55/lens-rs
max_upload_size
id371273
size87,645
Danube (TOETOE55)

documentation

https://docs.rs/lens-rs_derive/

README

Overview

deriving lens for custom data types.

see the guide

Example

#[derive(Debug, Lens)]
struct Baz<'a, A, B, C>{
    #[optic(ref)] 
    a: &'a A,     // can only take the immutable ref by optics::a
    #[optic(mut)] 
    b: &'a mut B, // can take the mutable ref by optics::b
    #[optic]
    c: C          // can mv it out by by optics::c
}

#[derive(Review, Prism, Debug)]
enum AnEnum<T> {
    A(T, i32), // couldn't derive Prism or Review
    #[optic] 
    B(T),
    #[optic]
    C,
    #[optic]
    D(),
    #[optic]
    E {},
}

#[derive(Lens, Debug)]
struct Foo {
    #[optic] a: i32,
    #[optic] b: i32,
}

fn test() -> Option<()> {
    let x = Review::review(optics!(Some.B), Foo {
        a: 3,
        b: 2,
    });
    assert_eq!(x.preview(optics!(Some.B.b))?, 2);
    
    Some(())
}

Limitations

  • can't derive Lens for enum.
  • can't derive Prism and Review for the variant has more than one argument or has named field.
Commit count: 96

cargo fmt