#[macro_use] extern crate derive_builder; use std::clone::Clone; use std::fmt::Display; #[derive(Debug, PartialEq, Default, Builder, Clone)] struct Generic where T: Clone, { ipsum: &'static str, pub dolor: T, } #[derive(Debug, PartialEq, Default, Builder, Clone)] pub struct GenericReference<'a, T: 'a + Default> where T: Display, { pub bar: Option<&'a T>, } #[test] fn error_if_uninitialized() { let error = GenericBuilder::::default().build().unwrap_err(); assert_eq!(&error.to_string(), "`ipsum` must be initialized"); } #[test] fn generic_builder() { let x = GenericBuilder::default() .ipsum("Generic") .dolor(true) .build() .unwrap(); assert_eq!( x, Generic { ipsum: "Generic".into(), dolor: true, } ); } #[test] fn generic_reference_builder() { static BAR: u32 = 42; let x = GenericReferenceBuilder::<'static, u32>::default() .bar(Some(&BAR)) .build() .unwrap(); assert_eq!(x, GenericReference { bar: Some(&BAR) }); }