use std::fmt; use tracing::Metadata; #[derive(Clone, Debug, Eq, PartialEq, Default)] pub struct Expect { pub name: Option, pub level: Option, pub target: Option, } impl Expect { pub(in crate::support) fn check(&self, actual: &Metadata<'_>, ctx: fmt::Arguments<'_>) { if let Some(ref expected_name) = self.name { let name = actual.name(); assert!( expected_name == name, "expected {} to be named `{}`, but got one named `{}`", ctx, expected_name, name ) } if let Some(ref expected_level) = self.level { let level = actual.level(); assert!( expected_level == level, "expected {} to be at level `{:?}`, but it was at level `{:?}` instead", ctx, expected_level, level, ) } if let Some(ref expected_target) = self.target { let target = actual.target(); assert!( expected_target == target, "expected {} to have target `{}`, but it had target `{}` instead", ctx, expected_target, target, ) } } } impl fmt::Display for Expect { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { if let Some(ref name) = self.name { write!(f, " named `{}`", name)?; } if let Some(ref level) = self.level { write!(f, " at the `{:?}` level", level)?; } if let Some(ref target) = self.target { write!(f, " with target `{}`", target)?; } Ok(()) } }