Module :: former_types

A flexible and extensible implementation of the builder pattern. Its compile-time structures and traits that are not generated but reused.
Example: Using Trait ComponentAssign
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 ComponentAssign 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 = "derive_former" ), not( feature = "enabled" ) ) ) ]
fn main() {}
#[ cfg( all( feature = "derive_former", feature = "enabled" ) ) ]
fn main()
{
use former_types::ComponentAssign;
#[ derive( Default, PartialEq, Debug ) ]
struct Person
{
age : i32,
name : String,
}
impl< IntoT > ComponentAssign< i32, IntoT > for Person
where
IntoT : Into< i32 >,
{
fn assign( &mut self, component : IntoT )
{
self.age = component.into();
}
}
impl< IntoT > ComponentAssign< 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 );
}
Try out cargo run --example former_types_trivial.
See code.