1 use std::fmt; 2 use tracing::Metadata; 3 4 #[derive(Clone, Debug, Eq, PartialEq, Default)] 5 pub struct Expect { 6 pub name: Option<String>, 7 pub level: Option<tracing::Level>, 8 pub target: Option<String>, 9 } 10 11 impl Expect { check(&self, actual: &Metadata<'_>, ctx: fmt::Arguments<'_>, subscriber_name: &str)12 pub fn check(&self, actual: &Metadata<'_>, ctx: fmt::Arguments<'_>, subscriber_name: &str) { 13 if let Some(ref expected_name) = self.name { 14 let name = actual.name(); 15 assert!( 16 expected_name == name, 17 "\n[{}] expected {} to be named `{}`, but got one named `{}`", 18 subscriber_name, 19 ctx, 20 expected_name, 21 name 22 ) 23 } 24 25 if let Some(ref expected_level) = self.level { 26 let level = actual.level(); 27 assert!( 28 expected_level == level, 29 "\n[{}] expected {} to be at level `{:?}`, but it was at level `{:?}` instead", 30 subscriber_name, 31 ctx, 32 expected_level, 33 level, 34 ) 35 } 36 37 if let Some(ref expected_target) = self.target { 38 let target = actual.target(); 39 assert!( 40 expected_target == target, 41 "\n[{}] expected {} to have target `{}`, but it had target `{}` instead", 42 subscriber_name, 43 ctx, 44 expected_target, 45 target, 46 ) 47 } 48 } 49 } 50 51 impl fmt::Display for Expect { fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result52 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 53 if let Some(ref name) = self.name { 54 write!(f, " named `{}`", name)?; 55 } 56 57 if let Some(ref level) = self.level { 58 write!(f, " at the `{:?}` level", level)?; 59 } 60 61 if let Some(ref target) = self.target { 62 write!(f, " with target `{}`", target)?; 63 } 64 65 Ok(()) 66 } 67 } 68