7个稳定版本
2.7.0 | 2024年7月13日 |
---|---|
2.6.0 | 2024年6月29日 |
2.2.0 | 2024年5月30日 |
#2566 在 算法 中
339 每月下载量
在 18 个crate中使用 (5 直接使用)
170KB
2K SLoC
模块 :: former_types
支持嵌套构建器和集合特定子构建器的Builder模式灵活实现。其编译时结构和特质不是生成的而是复用的。
示例:使用Trait Assign
演示设置struct的各种组件(字段)。
former_types
crate提供了一种通用的接口来设置对象上的组件。此示例定义了一个Person
结构并为其字段实现了Assign
特质。它展示了如何使用这些实现通过不同类型(可以转换为所需类型)来设置Person
实例的字段。
#[ 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",
// > }
}
尝试运行 cargo run --example former_types_trivial
。
查看代码.
依赖关系
~0–360KB