#[macro_use] extern crate derivative; #[derive(Derivative)] #[derivative(Debug)] struct Foo { foo: u8, #[derivative(Debug="ignore")] bar: u8, } #[derive(Derivative)] #[derivative(Debug)] struct Bar ( u8, #[derivative(Debug="ignore")] u8, ); #[derive(Derivative)] #[derivative(Debug)] enum C { C1(isize), C2(#[derivative(Debug="ignore")] i32), C3(String), } #[derive(Derivative)] #[derivative(Debug)] enum D { D1 { #[derivative(Debug="ignore")] a: isize } } #[derive(Derivative)] #[derivative(Debug)] struct F(#[derivative(Debug="ignore")] isize); #[derive(Derivative)] #[derivative(Debug)] struct G(isize, #[derivative(Debug="ignore")] isize); #[derive(Derivative)] #[derivative(Debug)] struct J(#[derivative(Debug="ignore")] NoDebug); struct NoDebug; trait ToDebug { fn to_show(&self) -> String; } impl ToDebug for T { fn to_show(&self) -> String { format!("{:?}", self) } } #[test] fn main() { assert_eq!(Foo { foo: 42, bar: 1 }.to_show(), "Foo { foo: 42 }".to_string()); assert_eq!(Bar(42, 1).to_show(), "Bar(42)".to_string()); assert_eq!(C::C1(12).to_show(), "C1(12)".to_string()); assert_eq!(C::C2(12).to_show(), "C2".to_string()); assert_eq!(C::C3("foo".to_string()).to_show(), "C3(\"foo\")".to_string()); assert_eq!(D::D1 { a: 42 }.to_show(), "D1".to_string()); assert_eq!(F(42).to_show(), "F".to_string()); assert_eq!(G(42, 0).to_show(), "G(42)".to_string()); assert_eq!(J(NoDebug).to_show(), "J".to_string()); }