1 个不稳定版本

0.1.0 2020年1月26日

#2908Rust 模式

Download history 147/week @ 2023-12-18 77/week @ 2023-12-25 28/week @ 2024-01-01 92/week @ 2024-01-08 174/week @ 2024-01-15 235/week @ 2024-01-22 96/week @ 2024-01-29 103/week @ 2024-02-05 303/week @ 2024-02-12 143/week @ 2024-02-19 432/week @ 2024-02-26 156/week @ 2024-03-04 441/week @ 2024-03-11 295/week @ 2024-03-18 151/week @ 2024-03-25 305/week @ 2024-04-01

1,239 每月下载量
5 个软件包中使用 (通过 缩写)

Unlicense OR MIT OR Apache-2.0

5KB
72

缩写

Crates.io: shorthand Documentation Build Status

shorthand 被定义为 一种快速书写系统,这正是这个库的目的;去除编写自己的库时带来的繁琐代码。

这个库做什么?

通过为结构的字段派生 getterssetters,使 Rust 编程更加方便。

use shorthand::ShortHand;

#[derive(ShortHand, Default)]
pub struct Example {
    number: usize,
    data: String,
}

let mut example = Example::default();

assert_eq!(example.number(), 0);
example.set_number(1);
assert_eq!(example.number(), 1);

assert_eq!(example.data(), &"".to_string());
example.set_data("hi".to_string());
assert_eq!(example.data(), &"hi".to_string());

否则,您将不得不手动编写这些代码

pub struct Example {
    number: usize,
    data: String,
}

#[allow(dead_code)]
impl Example {
    #[inline(always)]
    pub fn number(&self) -> usize { self.number }

    #[inline(always)]
    pub fn set_number(&mut self, value: usize) -> &mut Self {
        self.number = value;
        self
    }

    #[inline(always)]
    pub fn data(&self) -> &String { &self.data }

    #[inline(always)]
    pub fn set_data(&mut self, value: String) -> &mut Self {
        self.data = value;
        self
    }
}

如何开始?

只需将此库添加到您的 Cargo.toml 中的 [dependencies]

[dependencies]
shorthand = "0.1"

然后您可以为任何结构派生 ShortHand

use shorthand::ShortHand;

#[derive(ShortHand)]
struct Example {
    field: usize,
}

您可以在 这里 找到文档。

功能请求和错误报告

请随意提问或报告错误 这里。没有愚蠢的问题。

这个库应该尽可能方便,所以请随时提出功能请求。

参考

这个库受到了以下软件包的启发


lib.rs:

这个软件包基于 https://cprimozic.net/blog/writing-a-hashmap-to-struct-procedural-macro-in-rust/

很遗憾没有可用的软件包,所以我不得不自己创建一个 :(

我对代码进行了一些改进,并将其移植到更新的 syn 版本。例如,FromMap 特质不需要类型参数,并且 HashMap 应该包含静态字符串(字段名应在编译时已知)。

依赖关系

~1.5MB
~33K SLoC