#builder-pattern #fundamental #general-purpose

no-std former_types

支持嵌套构建器和集合特定子构建器的Builder模式灵活实现。其编译时结构和特质不是生成的而是复用的。

7个稳定版本

2.7.0 2024年7月13日
2.6.0 2024年6月29日
2.2.0 2024年5月30日

#2566算法

Download history 92/week @ 2024-05-15 55/week @ 2024-05-22 610/week @ 2024-05-29 241/week @ 2024-06-05 53/week @ 2024-06-12 22/week @ 2024-06-19 267/week @ 2024-06-26 89/week @ 2024-07-03 197/week @ 2024-07-10 51/week @ 2024-07-17 57/week @ 2024-07-24 24/week @ 2024-07-31

339 每月下载量
18 个crate中使用 (5 直接使用)

MIT 协议

170KB
2K SLoC

模块 :: former_types

experimental rust-status docs.rs Open in Gitpod discord

支持嵌套构建器和集合特定子构建器的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