#decorator #procedural #derive #macro #setter #proc-macro

进程宏 装饰器

生成装饰器方法的宏

2个版本

0.1.4 2022年5月22日
0.1.3 2022年5月22日
0.1.2 2021年6月24日
0.1.1 2021年6月24日
0.1.0 2021年6月24日

#16 in #decorator

MIT/Apache

8KB
78

装饰器进程宏

装饰器宏为每个带有前缀 #[dec] 的字段生成一个装饰器方法。另外,类型为 Option<T> 的字段可以用 #[opt_dec] 标记。这将生成一个将值设置为 Some(t) 的装饰器方法。

示例

#[derive(Decorator)]
struct Widget {
    #[dec]
    width: u32,
    #[dec]
    height: u32,

    #[opt_dec]
    background_color: Option<RGBA>,
}

生成到

struct Widget {
    width: u32,
    height: u32,
    background_color: Option<RGBA>,
}
impl Widget {
    pub fn width(self, width: u32) -> Self {
        Self {
            width,
            ..self
        }
    }
    pub fn height(self, height: u32) -> Self {
        Self {
            height,
            ..self
        }
    }
    pub fn background_color(self, background_color: RGBA) -> Self {
        Self {
            background_color: Some(background_color),
            ..self
        }
    }
}

可以像这样使用

let w = some_widget.width(10).height(20);
assert_eq!(w, Widget {width: 10, height: 20, background_color: None});

依赖项

~1.5MB
~36K SLoC