5 个版本
使用旧的 Rust 2015
0.2.2 | 2019年2月7日 |
---|---|
0.2.1 | 2019年1月13日 |
0.2.0 | 2018年11月24日 |
0.1.1 | 2018年9月15日 |
0.1.0 | 2018年9月13日 |
#149 in #telegram
在 actix-telegram 中使用
28KB
685 行
Getset,我们准备好了!
一个用于生成字段最基本的获取器和设置器的进程宏。
获取器生成为 fn field(&self) -> &type
,而设置器生成为 fn field(&mut self, val: type)
。
这些宏不打算用于需要在其设置器和获取器内部进行自定义逻辑的字段。在这种情况下,请自己编写!
#[macro_use]
extern crate getset;
#[derive(Getters, Setters, New, Default)]
#[get(vis = "pub")]
#[get(vis = "pub", mutable)]
#[set(vis = "pub", consume)]
#[set(vis = "pub")]
#[new(vis = "pub")]
pub struct Foo<T> where T: Copy + Clone + Default {
/// Doc comments are supported!
/// Multiline, even.
#[get(copy)] #[get(mutable)] #[set]
private: T,
/// Doc comments are supported!
/// Multiline, even.
public: Option<T>,
#[set(optional)]
optional: Option<String>,
}
fn main() {
let mut foo: Foo<i64> = Foo::new(1).consume_set_public(3);
assert_eq!(foo.private(), 1);
assert_eq!(*foo.public(), Some(3));
foo.set_private(3);
(*foo.private_mut()) += 1;
assert_eq!(foo.private(), 4);
foo.set_public(4);
assert_eq!(*foo.public(), Some(4));
foo.set_public(None);
assert_eq!(*foo.public(), None);
foo.set_optional(Some("test"));
assert_eq!(foo.optional(), &Some("test".to_string()));
foo.set_optional(None::<&str>);
assert_eq!(*foo.optional(), None);
}
#[macro_use]
extern crate getset;
mod submodule {
#[derive(Getters, Default)]
#[get = "pub"]
pub struct Foo {
#[get]
private: i32,
public: i32,
}
}
fn main() {
let mut foo = submodule::Foo::default();
assert_eq!(*foo.private(), 2);
}
依赖项
~2MB
~46K SLoC