#getter-setter #getter #setter #tool #macro #struct-fields

add_getters_setters

使为结构体字段添加获取器和设置器变得容易得多。只需在结构体和字段上添加一些属性即可完成

12个版本 (5个稳定版)

1.1.2 2020年1月24日
1.1.1 2020年1月22日
1.0.0 2019年12月24日
0.1.6 2019年12月19日

#1511 in 过程宏

Download history 524/week @ 2023-11-23 382/week @ 2023-11-30 264/week @ 2023-12-07 117/week @ 2023-12-14 79/week @ 2023-12-21 81/week @ 2024-01-04 139/week @ 2024-01-11 162/week @ 2024-01-18 78/week @ 2024-01-25 51/week @ 2024-02-01 66/week @ 2024-02-08 196/week @ 2024-02-15 184/week @ 2024-02-22 100/week @ 2024-02-29 103/week @ 2024-03-07

每月下载量613次
用于 packet_crafter

MIT 许可证

12KB
166

crates.io

add_getters_setters

使为结构体字段添加获取器和设置器变得容易得多。

只需将相应的元标签添加到结构体或结构体字段上即可生成相应的函数。

使用方法

  • 将此crate添加到您的Cargo.toml文件中

  • 将以下行添加到main.rs的顶部

    #[macro_use] extern crateadd_getters_setters;

  • 在您的结构体上添加#[derive()]标签,并派生必要的函数

    • AddGetter为您提供访问#[get]标签的权限,该标签将生成一个返回该标签所在字段引用的函数。
    • AddGetterMut为您提供访问#[get_mut]标签的权限,该标签将生成一个返回该标签所在字段可变引用的函数。
    • AddGetterVal为您提供访问#[get_val]标签的权限,该标签将生成一个返回字段数据副本的函数(自1.1.0版本以来可用)。
    • AddSetter 允许您访问 #[set] 标签,这将生成一个您可以用来设置字段值的函数。
  • 为每个字段添加适当的元标签以生成方法,或者从版本 1.0.0 开始,您可以将标签放置在结构体本身上,这将为结构体的每个字段生成相应的函数(请参阅此文件底部的示例)。

派生函数 标签 生成方法的签名
添加获取器 #[get] pub fn get_{字段名}(&self) -> &{字段数据类型}
添加获取器值 #[get_val] pub fn {字段名}(&self) -> {字段数据类型}
添加获取器可变 #[get_mut] pub fn get_{字段名}_mut(&mut self) -> &mut {字段数据类型}
添加设置器 #[set] pub fn set_{字段名}(&mut self,v: {字段数据类型})

注意,所有生成的函数都是公共方法。

示例

struct HorseRider {
    //stuff here
}

#[derive(AddGetter, AddGetterVal, AddGetterMut, AddSetter)]
struct RaceHorse {
    #[get]
    name: String,
    
    #[get]
    #[get_val]
    #[set]
    speed: i16,

    #[get]
    #[get_mut]
    rider: HorseRider,
}

使用此代码,将为您生成以下方法...

impl RaceHorse {
    pub fn get_name(&self) -> &String {
	    &self.name
    }
    
    pub fn get_speed(&self) -> &i16 {
	    &self.speed
    }

	pub fn speed(&self) -> i16 {
	    self.speed // implicit copy here
    }
    
    pub fn set_speed(&mut self, v: i16) {
	    self.speed = v;
    }
    
    pub fn get_rider(&self) -> &HorseRider {
	    &self.rider
    }
    
    pub fn get_rider_mut(&mut self) -> &mut HorseRider {
	    &mut self.rider
    }
}

自版本 1.0.0 以来

通过将 #[get]#[set] 标签添加到结构定义中为每个字段添加获取器和设置器

#[derive(AddGetter, AddSetter)]
#[get]
#[set]
struct Dragon {
    name: String,
    age: u64,
    weight: u32
}

这将产生与以下操作相同的效果

#[derive(AddGetter, AddSetter)]
struct Dragon {
    #[get]
    #[set]
    name: String,
    
    #[get]
    #[set]
    age: u64,
	
    #[get]
    #[set]
    weight: u32
}

依赖项

~1.5MB
~34K SLoC