use super::indication::SealIndication;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum SealChecks {
None,
SignatureOnly,
FullValidation,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SealVerification {
pub indication: SealIndication,
pub checks: SealChecks,
pub placeholder: bool,
}
impl SealVerification {
#[must_use]
pub fn passed(checks: SealChecks) -> Self {
Self {
indication: SealIndication::TotalPassed,
checks,
placeholder: false,
}
}
#[must_use]
pub fn failed(checks: SealChecks, reason: impl Into<String>) -> Self {
Self {
indication: SealIndication::TotalFailed(reason.into()),
checks,
placeholder: false,
}
}
#[must_use]
pub fn indeterminate(checks: SealChecks, reason: impl Into<String>) -> Self {
Self {
indication: SealIndication::Indeterminate(reason.into()),
checks,
placeholder: false,
}
}
#[must_use]
pub fn placeholder(reason: impl Into<String>) -> Self {
Self {
indication: SealIndication::Indeterminate(reason.into()),
checks: SealChecks::None,
placeholder: true,
}
}
#[must_use]
pub fn is_qualified_pass(&self) -> bool {
!self.placeholder
&& self.checks == SealChecks::FullValidation
&& self.indication == SealIndication::TotalPassed
}
#[must_use]
pub fn is_coherent(&self) -> bool {
!(self.indication == SealIndication::TotalPassed && self.checks == SealChecks::None)
}
}