use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct VerificationPolicy {
require_checksum: bool,
}
impl VerificationPolicy {
#[must_use]
pub fn require_checksum(&self) -> bool {
self.require_checksum
}
}
impl Default for VerificationPolicy {
fn default() -> Self {
Self {
require_checksum: true,
}
}
}
impl fmt::Display for VerificationPolicy {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
if self.require_checksum {
write!(f, "checksum verification required")
} else {
write!(f, "checksum verification disabled")
}
}
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)]
pub enum VerificationFailureAction {
#[default]
FallbackWithWarning,
}
impl fmt::Display for VerificationFailureAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::FallbackWithWarning => {
write!(f, "fall back to local build with warning")
}
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_policy_requires_checksum() {
let policy = VerificationPolicy::default();
assert!(policy.require_checksum());
}
#[test]
fn policy_display_when_required() {
let policy = VerificationPolicy::default();
assert_eq!(format!("{policy}"), "checksum verification required");
}
#[test]
fn default_failure_action_is_fallback_with_warning() {
let action = VerificationFailureAction::default();
assert_eq!(action, VerificationFailureAction::FallbackWithWarning);
}
#[test]
fn failure_action_display() {
let action = VerificationFailureAction::FallbackWithWarning;
assert_eq!(format!("{action}"), "fall back to local build with warning");
}
}