#[cfg(feature = "use_core")] extern crate core; #[macro_use] extern crate derivative; #[derive(Debug, Derivative, PartialEq)] #[derivative(Default="new")] struct Foo { foo: u8, #[derivative(Default(value="42"))] bar: u8, } #[derive(Debug, Derivative, PartialEq)] #[derivative(Default(new="true"))] struct Bar ( u8, #[derivative(Default(value="42"))] u8, ); #[derive(Debug, PartialEq)] struct B1(u8, u8); #[derive(Debug, PartialEq)] struct B2{a:u8, b:u8} #[derive(Debug, Derivative, PartialEq)] #[derivative(Default(new="true"))] struct Baz ( #[derivative(Default(value="[1,2]"))] [u8;2], #[derivative(Default(value="[3;2]"))] [u8;2], #[derivative(Default(value="(4,5)"))] (u8, u8), #[derivative(Default(value="B1(6,7)"))] B1, #[derivative(Default(value="B2{a:8,b:9}"))] B2, ); #[derive(Debug, Derivative, PartialEq)] #[derivative(Default)] enum Enum1 { #[allow(dead_code)] A, #[derivative(Default)] B, } #[derive(Debug, Derivative, PartialEq)] #[derivative(Default)] enum Enum2 { #[derivative(Default)] A, #[allow(dead_code)] B, } #[derive(Debug, Derivative, PartialEq)] #[derivative(Default)] struct A(#[derivative(Default(value="NoDefault"))] NoDefault); #[derive(Debug, PartialEq)] struct NoDefault; #[test] fn main() { assert_eq!(Foo::default(), Foo { foo: 0, bar: 42 }); assert_eq!(Foo::new(), Foo { foo: 0, bar: 42 }); assert_eq!(Bar::default(), Bar(0, 42)); assert_eq!(Bar::new(), Bar(0, 42)); assert_eq!(Baz::new(), Baz([1,2], [3,3], (4,5), B1(6,7), B2{a:8,b:9})); assert_eq!(A::default(), A(NoDefault)); assert_eq!(Enum1::default(), Enum1::B); assert_eq!(Enum2::default(), Enum2::A); }