use crate::policy;
#[derive(PartialEq)]
enum Value {
None,
Neutral,
Pass,
Fail,
}
pub struct DMARCResult {
value: Value,
policy: Option<policy::Policy>,
}
impl DMARCResult {
pub fn to_str(&self) -> &'static str {
match self.value {
Value::None => "none",
Value::Neutral => "neutral",
Value::Pass => "pass",
Value::Fail => "fail",
}
}
pub fn neutral(policy: policy::Policy) -> Self {
Self {
value: Value::Neutral,
policy: Some(policy),
}
}
pub fn pass(policy: policy::Policy) -> Self {
Self {
value: Value::Pass,
policy: Some(policy),
}
}
pub fn fail(policy: policy::Policy) -> Self {
Self {
value: Value::Fail,
policy: Some(policy),
}
}
pub fn none() -> Self {
Self {
value: Value::None,
policy: None,
}
}
pub fn should_reject(&self) -> bool {
if let Some(policy) = &self.policy {
self.value == Value::Fail && policy.action == policy::ReceiverAction::Reject
} else {
false
}
}
}