use crate::{canonicalization, DKIMError};
#[derive(Clone)]
pub struct DKIMResult {
value: &'static str,
error: Option<DKIMError>,
domain_used: String,
header_canonicalization_type: Option<canonicalization::Type>,
body_canonicalization_type: Option<canonicalization::Type>,
}
impl DKIMResult {
pub fn pass(
domain_used: String,
header_canonicalization_type: canonicalization::Type,
body_canonicalization_type: canonicalization::Type,
) -> Self {
DKIMResult {
value: "pass",
error: None,
domain_used,
header_canonicalization_type: Some(header_canonicalization_type),
body_canonicalization_type: Some(body_canonicalization_type),
}
}
pub fn neutral(domain_used: String) -> Self {
DKIMResult {
value: "neutral",
error: None,
domain_used,
header_canonicalization_type: None,
body_canonicalization_type: None,
}
}
pub fn fail(reason: DKIMError, domain_used: String) -> Self {
DKIMResult {
value: "fail",
error: Some(reason),
domain_used,
header_canonicalization_type: None,
body_canonicalization_type: None,
}
}
pub fn error(&self) -> Option<DKIMError> {
self.error.clone()
}
pub fn domain_used(&self) -> String {
self.domain_used.to_lowercase()
}
pub fn summary(&self) -> &'static str {
self.value
}
pub fn header_canonicalization_type(&self) -> Option<canonicalization::Type> {
self.header_canonicalization_type.clone()
}
pub fn body_canonicalization_type(&self) -> Option<canonicalization::Type> {
self.body_canonicalization_type.clone()
}
pub fn with_detail(&self) -> String {
if let Some(err) = self.error() {
format!("{} ({})", self.value, err)
} else {
self.value.to_owned()
}
}
}