#getter-setter #getter #setters #getters #setter #macro #generate

gset

为字段生成最基本获取器和设置器的过程宏

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 过程宏

Download history 428/week @ 2024-05-09 362/week @ 2024-05-16 14/week @ 2024-05-23 7/week @ 2024-06-13 47/week @ 2024-06-20 4/week @ 2024-06-27 30/week @ 2024-07-04 748/week @ 2024-07-11 1041/week @ 2024-07-18 754/week @ 2024-07-25 337/week @ 2024-08-01

每月2,880次下载
用于 tmdb-async

MIT 协议

30KB
414

gset

Rust的获取器和设置器。

Crates.io Documentation MIT licensed Build Status

提供一种过程宏,可以派生结构体的基本获取器和设置器。

使用示例

以下提供了一个使用此库的示例。

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