use std::fmt;
use crate::metadata_error::MetadataError;
#[derive(Debug, Clone, PartialEq, Eq)]
#[must_use]
pub struct MetadataValidationError {
issues: Vec<MetadataError>,
}
impl MetadataValidationError {
#[inline]
#[must_use = "the validation error should be inspected"]
pub fn from_issue(issue: MetadataError) -> Self {
Self { issues: vec![issue] }
}
#[inline]
pub fn from_issues(issues: Vec<MetadataError>) -> Option<Self> {
(!issues.is_empty()).then_some(Self { issues })
}
#[inline]
#[must_use = "the validation issues should be inspected"]
pub fn issues(&self) -> &[MetadataError] {
&self.issues
}
#[inline]
#[must_use]
#[allow(clippy::len_without_is_empty)]
pub fn len(&self) -> usize {
self.issues.len()
}
#[inline]
#[must_use]
pub fn into_issues(self) -> Vec<MetadataError> {
self.issues
}
}
impl fmt::Display for MetadataValidationError {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(formatter, "{} metadata validation issue(s)", self.issues.len())?;
for (index, issue) in self.issues.iter().enumerate() {
write!(formatter, "; {}: {issue}", index + 1)?;
}
Ok(())
}
}
impl std::error::Error for MetadataValidationError {}