12 stable releases
2.12.0 | Oct 30, 2024 |
---|---|
2.11.0 | Oct 30, 2024 |
2.8.0 | Sep 5, 2024 |
2.7.0 | Jul 13, 2024 |
2.2.0 | May 30, 2024 |
#2384 in Algorithms
1,600 downloads per month
Used in 39 crates
(5 directly)
175KB
2.5K
SLoC
Module :: former_types
A flexible implementation of the Builder pattern supporting nested builders and collection-specific subformers. Its compile-time structures and traits that are not generated but reused.
Example: Using Trait Assign
Demonstrates setting various components (fields) of a struct.
The former_types
crate provides a generic interface for setting components on an object. This example defines a Person
struct
and implements the Assign
trait for its fields. It shows how to use these implementations to set the fields of a Person
instance using different types that can be converted into the required types.
#[ cfg( any( not( feature = "types_former" ), not( feature = "enabled" ) ) ) ]
fn main() {}
#[ cfg( all( feature = "types_former", feature = "enabled" ) ) ]
fn main()
{
use former_types::Assign;
#[ derive( Default, PartialEq, Debug ) ]
struct Person
{
age : i32,
name : String,
}
impl< IntoT > Assign< i32, IntoT > for Person
where
IntoT : Into< i32 >,
{
fn assign( &mut self, component : IntoT )
{
self.age = component.into();
}
}
impl< IntoT > Assign< String, IntoT > for Person
where
IntoT : Into< String >,
{
fn assign( &mut self, component : IntoT )
{
self.name = component.into();
}
}
let mut got : Person = Default::default();
got.assign( 13 );
got.assign( "John" );
assert_eq!( got, Person { age : 13, name : "John".to_string() } );
dbg!( got );
// > Person {
// > age: 13,
// > name: "John",
// > }
}
Try out cargo run --example former_types_trivial
.
See code.
Dependencies
~0–380KB