11个版本 (7个稳定版)
1.1.0 | 2024年7月23日 |
---|---|
1.0.5 | 2024年5月18日 |
0.1.0 | 2023年5月22日 |
0.0.3 | 2023年5月9日 |
0.0.2 | 2023年1月10日 |
#888 in 过程宏
每月2,880次下载
用于 tmdb-async
30KB
414 行
gset
Rust的获取器和设置器。
提供一种过程宏,可以派生结构体的基本获取器和设置器。
使用示例
以下提供了一个使用此库的示例。
use gset::Getset;
#[derive(Getset)]
struct Struct<T>
{
/// Field 1.
#[getset(get_copy, name = "get_field_1", vis = "pub")]
#[getset(set)]
field_1: f64,
/// Field 2.
#[getset(get_deref, vis = "pub")]
#[getset(get_deref_mut, vis = "pub")]
#[getset(set, vis = "pub")]
field_2: Vec<T>,
}
这也适用于元组结构,但 name
参数成为必填项。
use gset::Getset;
#[derive(Getset)]
struct Struct<T>(
/// Field 1.
#[getset(get_copy, name = "get_field_1", vis = "pub")]
#[getset(set, name = "set_field_1")]
f64,
/// Field 2.
#[getset(get_deref, name = "get_field_2", vis = "pub")]
#[getset(get_deref_mut, name = "get_field_2_mut", vis = "pub")]
#[getset(set, name = "set_field_2", vis = "pub")]
Vec<T>,
);
字段属性
所有字段属性都有以下命名参数
name
— 推断出的方法的名称。必须是有效的Rust 标识符。对于元组结构体,这是一个必填参数。vis
— 推断出的方法的可见性。必须是有效的Rust 可见性修饰符。默认情况下,可见性为private
。
其中一些还有以下命名参数
ty
— 推断出的方法的返回类型。必须是有效的Rust 类型。
说明
以下我们将遵循以下符号。
field
— 字段名称。T
— 字段类型。
目前支持的字段属性列表如下。
1. get
为字段派生引用获取器。
参数
name
— 结果方法的名称。如果未设置,则将命名为field
。vis
— 结果方法的可见性。如果未设置,则为私有。ty
— 结果方法的返回类型。如果未设置,则具有&T
返回类型。
示例
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get, vis = "pub")]
a: f64,
}
将展开为
struct Struct {
/// Doc comment.
a: f64,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn a(&self) -> &f64 {
&self.a
}
}
2. get_mut
派生一个字段的可变获取器。
参数
name
— 结果方法的名称。如果未设置,将命名为field_mut
。vis
— 结果方法的可见性。如果未设置,则为私有。ty
— 结果方法的返回类型。如果未设置,则具有&mut T
返回类型。
示例
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get_mut, vis = "pub")]
a: f64,
}
将展开为
struct Struct {
/// Doc comment.
a: f64,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn a_mut(&mut self) -> &mut f64 {
&mut self.a
}
}
3. get_copy
派生一个字段的复制获取器。
参数
name
— 结果方法的名称。如果未设置,则将命名为field
。vis
— 结果方法的可见性。如果未设置,则为私有。ty
— 结果方法的返回类型。如果未设置,则具有T
返回类型。
示例
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get_copy, vis = "pub")]
a: f64,
}
将展开为
struct Struct {
/// Doc comment.
a: f64,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn a(&self) -> f64 {
self.a
}
}
4. get_deref
派生一个字段的引用获取器,将对结果引用应用 deref
操作。
参数
name
— 结果方法的名称。如果未设置,则将命名为field
。vis
— 结果方法的可见性。如果未设置,则为私有。ty
— 结果方法的返回类型。如果未设置,则具有&<T as ::std::ops:Deref>::Target
返回类型。
示例
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get_deref, vis = "pub")]
a: Vec<f64>,
}
将展开为
struct Struct {
/// Doc comment.
a: Vec<f64>,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn a(&self) -> &[f64] {
&self.a
}
}
5. get_deref_mut
派生一个字段的可变获取器,将对结果引用应用 deref_mut
操作。
参数
name
— 结果方法的名称。如果未设置,将命名为field_mut
。vis
— 结果方法的可见性。如果未设置,则为私有。ty
— 结果方法的返回类型。如果未设置,则具有&mut <T as ::std::ops:Deref>::Target
返回类型。
示例
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get_deref_mut, vis = "pub")]
a: Vec<f64>,
}
将展开为
struct Struct {
/// Doc comment.
a: Vec<f64>,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn a_mut(&mut self) -> &mut [f64] {
&mut self.a
}
}
6. get_deref_copy
派生一个字段的复制获取器,将对字段值应用解引用。
参数
name
— 结果方法的名称。如果未设置,则将命名为field
。vis
— 结果方法的可见性。如果未设置,则为私有。ty
— 结果方法的返回类型。如果未设置,则具有<T as ::std::ops:Deref>::Target
返回类型。
示例
use derive_more::Deref;
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get_deref_copy, vis = "pub")]
a: F64,
}
#[derive(Deref)]
struct F64(f64);
将展开为
use derive_more::Deref;
struct Struct {
/// Doc comment.
a: F64,
}
#[derive(Deref)]
struct F64(f64);
impl Struct {
/// Doc comment.
#[inline]
pub fn a(&self) -> f64 {
*self.a
}
}
7. get_as_ref
派生一个字段的引用获取器,将对结果引用应用 as_ref
操作。
参数
name
— 结果方法的名称。如果未设置,则将命名为field
。vis
— 结果方法的可见性。如果未设置,则为私有。ty
— 结果方法的返回类型。必需参数。
示例
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get_as_ref, vis = "pub", ty = "Option<&f64>")]
a: Option<f64>,
}
将展开为
struct Struct {
/// Doc comment.
a: Option<f64>,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn a(&self) -> Option<&f64> {
self.a.as_ref()
}
}
8. get_as_deref
派生一个字段的引用获取器,将对结果引用应用 as_deref
操作。
参数
name
— 结果方法的名称。如果未设置,则将命名为field
。vis
— 结果方法的可见性。如果未设置,则为私有。ty
— 结果方法的返回类型。必需参数。
示例
use derive_more::Deref;
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get_as_deref, vis = "pub", ty = "Option<&f64>")]
a: Option<F64>,
}
#[derive(Deref)]
struct F64(f64);
将展开为
use derive_more::Deref;
struct Struct {
/// Doc comment.
a: Option<F64>,
}
#[derive(Deref)]
struct F64(f64);
impl Struct {
/// Doc comment.
#[inline]
pub fn a(&self) -> Option<&f64> {
self.a.as_deref()
}
}
9. get_as_deref_mut
派生一个字段的可变获取器,将对结果引用应用 as_deref_mut
操作。
参数
name
— 结果方法的名称。如果未设置,将命名为field_mut
。vis
— 结果方法的可见性。如果未设置,则为私有。ty
— 结果方法的返回类型。必需参数。
示例
use derive_more::{Deref, DerefMut};
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get_as_deref_mut, vis = "pub", ty = "Option<&mut f64>")]
a: Option<F64>,
}
#[derive(Deref, DerefMut)]
struct F64(f64);
将展开为
use derive_more::{Deref, DerefMut};
struct Struct {
/// Doc comment.
a: Option<F64>,
}
#[derive(Deref, DerefMut)]
struct F64(f64);
impl Struct {
/// Doc comment.
#[inline]
pub fn a_mut(&mut self) -> Option<&mut f64> {
self.a.as_deref_mut()
}
}
10. set
派生一个字段的设置器。
参数
name
— 结果方法的名称。如果未设置,将命名为set_field
。vis
— 结果方法的可见性。如果未设置,则为私有。
示例
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(set, vis = "pub")]
a: f64,
}
将展开为
struct Struct {
/// Doc comment.
a: f64,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn set_a(&mut self, value: f64) {
self.a = value
}
}
11. set_borrow
派生一个字段的借用设置器。
参数
name
— 结果方法的名称。如果未设置,将命名为set_field
。vis
— 结果方法的可见性。如果未设置,则为私有。
示例
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(set_borrow, vis = "pub")]
a: f64,
}
将展开为
struct Struct {
/// Doc comment.
a: f64,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn set_a(&mut self, value: f64) -> &mut Self {
self.a = value;
self
}
}
12. set_own
派生一个字段的所有权设置器。
参数
name
— 结果方法的名称。如果未设置,将命名为set_field
。vis
— 结果方法的可见性。如果未设置,则为私有。
示例
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(set_own, vis = "pub")]
a: f64,
}
将展开为
struct Struct {
/// Doc comment.
a: f64,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn set_a(mut self, value: f64) -> Self {
self.a = value;
self
}
}
依赖项
~0.4–0.9MB
~20K SLoC