use std::fmt;
use qubit_redact::Redact;
use qubit_redact::RedactionWriter;
use qubit_redact::Redactor;
use crate::metadata_error::MetadataError;
#[derive(Clone, PartialEq, Eq)]
#[must_use]
pub struct MetadataValidationError {
issues: Vec<MetadataError>,
}
impl MetadataValidationError {
#[inline]
pub fn from_issue(issue: MetadataError) -> Self {
Self { issues: vec![issue] }
}
#[must_use]
#[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 Redact for MetadataValidationError {
fn write_redacted(&self, writer: &mut RedactionWriter<'_>) {
writer.sequence(|items| {
items.for_each(&self.issues, |items, issue| {
items.unredacted_item(|| issue);
});
});
}
}
impl fmt::Debug for MetadataValidationError {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::Display::fmt(self, formatter)
}
}
impl fmt::Display for MetadataValidationError {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
let output = Redactor::strict().redact_text(self);
let text = output.text_or_marker("<redaction incomplete>");
write!(
formatter,
"{} metadata validation issue(s): {}",
self.issues.len(),
text
)
}
}
impl std::error::Error for MetadataValidationError {}