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