use super::ViolationDraft;
use crate::ValidationOutcome;
use crate::ValidationOutcomeError;
use crate::ValidatorId;
use crate::Violation;
#[must_use]
#[derive(Debug, PartialEq, Eq)]
#[non_exhaustive]
pub enum PreparedOutcome {
Valid,
Invalid(
Vec<ViolationDraft>,
),
}
impl PreparedOutcome {
#[inline]
pub const fn valid() -> Self {
Self::Valid
}
pub fn invalid(violations: Vec<ViolationDraft>) -> Result<Self, ValidationOutcomeError> {
if violations.is_empty() {
return Err(ValidationOutcomeError::EmptyViolations);
}
Ok(Self::Invalid(violations))
}
pub fn into_bound(self, rule_id: ValidatorId) -> Result<ValidationOutcome, ValidationOutcomeError> {
match self {
Self::Valid => Ok(ValidationOutcome::Valid),
Self::Invalid(drafts) => ValidationOutcome::invalid(
drafts
.into_iter()
.map(|draft| Violation::from_draft(rule_id, draft))
.collect(),
),
}
}
}