#accessor #generate #struct #field #impl #accessing #set

macro accessors-rs

生成用于访问结构体字段的impl的过程宏。

1 个不稳定版本

0.1.0 2022年4月17日

#1970 in 过程宏

MIT 许可证

20KB
511

Accessors派生宏

生成用于访问结构体字段的impl的派生宏。
使用 #[accessors(get, get_mut, set)] 定义你想要在字段上拥有的访问器。

accessors 参数列表。

  • get: 生成返回引用的getter。
  • get_copy: 生成返回复制的getter。 (与get互斥)
  • get_mut: 生成返回可变引用的可变getter。
  • set: 生成setter。

在一个 字段 上使用 #[accessors(...)] 将为该特定字段生成访问器。
在一个 结构体 上使用 #[accessors(...)] 将为结构体中的所有字段生成访问器。

示例

仅对字段使用 accessors 的示例。

#[derive(Accessors)]
struct MyStruct {
    #[accessors(get_copy, get_mut)]
    #[accessors(set)] // Can use multiple `#[accessors(...)]`
    a: u8,
    #[accessors(get, get_mut, set)]
    b: String,
}

对结构体使用 accessors 的示例。

#[derive(Accessors)]
#[accessors(get, get_mut, set)]
struct MyStruct {
    #[accessors(get_copy)] // `get_copy` will overwrite `get`. 
    a: u8,
    b: String,
}

这两个示例是等效的,并将生成相同的代码

impl MyStruct {
   pub fn a(&self) -> u8 {
       self.a
   }
   pub fn a_mut(&mut self) -> &mut u8 {
       &mut self.a
   }
   pub fn set_a(&mut self, a: u8) {
       self.a = a;
   }
   pub fn b(&self) -> &String {
       &self.b
   }
   pub fn b_mut(&mut self) -> &mut String {
       &mut self.b
   }
   pub fn set_b(&mut self, b: String) {
       self.b = b;
   }

依赖关系

~1.5MB
~35K SLoC