use crate::FailureId;
use crate::SkipReason;
use crate::ValidationOutcomeError;
use crate::Violation;
#[must_use]
#[derive(Debug, PartialEq, Eq)]
#[non_exhaustive]
pub enum ValidationOutcome {
Valid,
Invalid(
Vec<Violation>,
),
Skipped {
reason: SkipReason,
prerequisites: Vec<FailureId>,
},
}
impl ValidationOutcome {
#[inline]
pub const fn valid() -> Self {
Self::Valid
}
pub fn invalid(violations: Vec<Violation>) -> Result<Self, ValidationOutcomeError> {
if violations.is_empty() {
return Err(ValidationOutcomeError::EmptyViolations);
}
Ok(Self::Invalid(violations))
}
#[inline]
pub fn missing_optional() -> Self {
Self::Skipped {
reason: SkipReason::MissingOptional,
prerequisites: Vec::new(),
}
}
pub fn failed_prerequisite(prerequisites: Vec<FailureId>) -> Result<Self, ValidationOutcomeError> {
if prerequisites.is_empty() {
return Err(ValidationOutcomeError::EmptyPrerequisites);
}
Ok(Self::Skipped {
reason: SkipReason::FailedPrerequisite,
prerequisites,
})
}
}