2 unstable releases
| 0.2.0 | Jul 11, 2024 |
|---|---|
| 0.1.5 | Aug 4, 2023 |
#12 in #convenience
361 downloads per month
Used in 2 crates
(via structinator)
6KB
Struct-inator Traits
This is a library for implementing a trait, SpecifyCreatableStruct - which, when implemented, alliows for quick and easy conversion between rust Iterators and
types that implement SpecifyCreatableStruct.
More specifically, any type implementing SpecifyCreatableStruct must implement create_struct, a function converting directly from an Iterator over items of type NamedField<I>, where
I is the same type as InnerIteratorType
You can implement this trait yourself, or you can automatically implement it for a user-defined struct using structinator
Example
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);
}
structinator_traits is designed to be used with structinator, a library that automatically implements the SpecifyCreatableStruct trait. However, this library is also useful because it contains the type that the argument passed to create_struct must iterate over, or can be used to mix custom and automatic implementations of SpecifyCreatableStruct. For more information, check the documentation below.