1 个不稳定版本
0.1.0 | 2020年1月26日 |
---|
#2908 在 Rust 模式
1,239 每月下载量
在 5 个软件包中使用 (通过 缩写)
5KB
72 行
缩写
shorthand
被定义为 一种快速书写系统
,这正是这个库的目的;去除编写自己的库时带来的繁琐代码。
这个库做什么?
通过为结构的字段派生 getters
和 setters
,使 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,
}
您可以在 这里 找到文档。
功能请求和错误报告
请随意提问或报告错误 这里。没有愚蠢的问题。
这个库应该尽可能方便,所以请随时提出功能请求。
参考
这个库受到了以下软件包的启发
getset
(仅问题跟踪器和请求的功能)thiserror
derive-builder
proc-macro-workshop
lib.rs
:
这个软件包基于 https://cprimozic.net/blog/writing-a-hashmap-to-struct-procedural-macro-in-rust/
很遗憾没有可用的软件包,所以我不得不自己创建一个 :(
我对代码进行了一些改进,并将其移植到更新的 syn
版本。例如,FromMap
特质不需要类型参数,并且 HashMap
应该包含静态字符串(字段名应在编译时已知)。
依赖关系
~1.5MB
~33K SLoC