#[derive(Default, Debug, Clone, PartialEq, Eq)]
pub struct FailedChecks<C: Check>(HashSet<C>);
impl<C: Check> Display for FailedChecks<C>
{
#[inline(always)]
fn fmt(&self, f: &mut Formatter) -> fmt::Result
{
write!(f, "{}", self.to_message())
}
}
impl<C: Check> error::Error for FailedChecks<C>
{
#[inline(always)]
fn source(&self) -> Option<&(dyn error::Error + 'static)>
{
None
}
}
impl<C: Check> FailedChecks<C>
{
#[inline(always)]
pub(crate) fn new() -> Self
{
Self(HashSet::new())
}
#[inline(always)]
pub(crate) fn add_failed_check(&mut self, check: C)
{
let previously_inserted = self.0.insert(check);
debug_assert_eq!(previously_inserted, false)
}
#[inline(always)]
pub(crate) fn to_message(&self) -> String
{
let mut message = format!("The following {} checks failed:", C::Name);
for check in self.0.iter()
{
message.push_str(&format!(" {}({})", check.get_message().unwrap(), check.get_detailed_message().unwrap()))
}
message
}
}