2 个不稳定版本
0.2.0 | 2024年7月11日 |
---|---|
0.1.5 | 2023年8月4日 |
#1763 in Rust 模式
183 每月下载量
用于 2 个包(通过 structinator)
6KB
structinator_traits 旨在与 structinator 一起使用,这是一个自动实现 SpecifyCreatableStruct
特质的库。然而,这个库也非常有用,因为它包含传递给 create_struct
的参数必须迭代的类型,或者可以用来混合自定义和自动实现的 SpecifyCreatableStruct
。更多信息,请查看下面的文档。
lib.rs
:
Struct-inator 特质
这是一个实现特质的库,SpecifyCreatableStruct
- 当实现时,允许 Rust Iterators
和实现 SpecifyCreatableStruct
的类型之间快速轻松地转换。
更具体地说,任何实现 SpecifyCreatableStruct
的类型必须实现 create_struct
,这是一个将 Iterator
转换为 NamedField<I>
的函数,其中 I
与 InnerIteratorType
相同
您可以自己实现此特质,或者可以使用 structinator
自动为用户定义的结构体实现它
示例
use structinator_traits::*;
use structinator::iter_convertable;
use enum_unwrapper::unique_try_froms;
#[unique_try_froms()]
enum WaffleInfo {
Topping(u8),
Layers(u16),
}
#[iter_convertable(WaffleInfo)]
struct Waffles {
syrup_amount: u8,
butter_amount: u8,
layer_count: u16,
}
fn main() {
let mut iterator = [NamedField::<WaffleInfo> {
name: String::from("butter_amount"),
wrapped_value: WaffleInfo::Topping(44),
}, NamedField::<WaffleInfo> {
name: String::from("layer_count"),
wrapped_value: WaffleInfo::Layers(444),
}, NamedField::<WaffleInfo> {
name: String::from("syrup_amount"),
wrapped_value: WaffleInfo::Topping(4),
}].into_iter();
let generated_struct = Waffles::create_struct(&mut iterator).unwrap();
assert_eq!(4,generated_struct.syrup_amount);
assert_eq!(44,generated_struct.butter_amount);
assert_eq!(444,generated_struct.layer_count);
}