| Crates.io | component_model_types |
| lib.rs | component_model_types |
| version | 0.13.0 |
| created_at | 2025-04-20 06:22:00.901895+00 |
| updated_at | 2025-09-23 09:53:53.506632+00 |
| description | Component model. |
| homepage | https://github.com/Wandalen/wTools/tree/master/module/core/component_model |
| repository | https://github.com/Wandalen/wTools/tree/master/module/core/component_model |
| max_upload_size | |
| id | 1641432 |
| size | 39,056 |
component_model_typesA flexible implementation of the Builder pattern supporting nested builders and collection-specific subcomponent_models. Its compile-time structures and traits that are not generated but reused.
Demonstrates setting various components (fields) of a struct.
The component_model_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_component_assign" ), not( feature = "enabled" ) ) ) ]
fn main() {}
#[ cfg( all( feature = "types_component_assign", feature = "enabled" ) ) ]
fn main()
{
use component_model_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 component_model_types_trivial.
See code.