use super::FailureId;
use super::SkipReason;
use super::ValidationOutcomeError;
use super::ValidationPath;
#[must_use]
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct SkippedValidation {
occurrence: usize,
path: ValidationPath,
reason: SkipReason,
prerequisites: Vec<FailureId>,
}
impl SkippedValidation {
#[inline]
pub fn missing_optional(occurrence: usize, path: ValidationPath) -> Self {
Self {
occurrence,
path,
reason: SkipReason::MissingOptional,
prerequisites: Vec::new(),
}
}
pub fn failed_prerequisite(
occurrence: usize,
path: ValidationPath,
prerequisites: Vec<FailureId>,
) -> Result<Self, ValidationOutcomeError> {
if prerequisites.is_empty() {
return Err(ValidationOutcomeError::EmptyPrerequisites);
}
Ok(Self {
occurrence,
path,
reason: SkipReason::FailedPrerequisite,
prerequisites,
})
}
#[must_use]
#[inline]
pub const fn occurrence(&self) -> usize {
self.occurrence
}
#[must_use]
#[inline]
pub const fn path(&self) -> &ValidationPath {
&self.path
}
#[must_use]
#[inline]
pub const fn reason(&self) -> SkipReason {
self.reason
}
#[must_use = "inspect the prerequisite failure IDs"]
#[inline]
pub fn prerequisites(&self) -> &[FailureId] {
&self.prerequisites
}
}