kumo_dmarc/types/
results.rs

1use crate::types::identifier::Identifier;
2use crate::types::policy::Policy;
3use crate::types::policy_override::PolicyOverrideReason;
4use instant_xml::{FromXml, ToXml};
5use kumo_spf::SpfDisposition;
6use std::net::IpAddr;
7
8#[derive(Debug, Eq, FromXml, PartialEq, ToXml)]
9#[xml(scalar, rename_all = "lowercase")]
10pub enum SpfScope {
11    Helo,
12    Mfrom,
13}
14
15#[derive(Debug, Eq, FromXml, PartialEq, ToXml)]
16#[xml(rename = "spf")]
17pub struct SpfAuthResult {
18    domain: String,
19    scope: SpfScope,
20    result: SpfDisposition,
21}
22
23#[derive(Debug, Eq, PartialEq, ToXml)]
24#[xml(rename = "auth_results")]
25pub struct AuthResults {
26    dkim: Vec<DkimAuthResult>,
27    spf: Vec<SpfAuthResult>,
28}
29
30#[derive(Debug, Eq, PartialEq, ToXml)]
31#[xml(rename = "record")]
32pub struct Results {
33    row: Row,
34    identifiers: Identifier,
35    auth_results: AuthResults,
36}
37
38#[derive(Debug, Eq, PartialEq, ToXml)]
39#[xml(scalar, rename_all = "lowercase")]
40pub enum DkimResult {
41    None,
42    Pass,
43    Fail,
44    Policy,
45    Neutral,
46    TempError,
47    PermError,
48}
49
50#[derive(Debug, Eq, PartialEq, ToXml)]
51pub struct DkimAuthResult {
52    domain: String,
53    selector: Option<String>,
54    result: DkimResult,
55    human_result: Option<String>,
56}
57
58#[derive(Debug, Eq, PartialEq, ToXml)]
59#[xml(scalar, rename_all = "lowercase")]
60pub enum DmarcResult {
61    Pass,
62    Fail,
63}
64
65#[derive(Debug, Eq, PartialEq, ToXml)]
66#[xml(rename = "policy_evaluated")]
67pub struct PolicyEvaluated {
68    disposition: Policy,
69    dkim: DmarcResult,
70    spf: DmarcResult,
71    reason: Vec<PolicyOverrideReason>,
72}
73
74#[derive(Debug, Eq, PartialEq, ToXml)]
75#[xml(rename = "row")]
76pub struct Row {
77    source_ip: IpAddr,
78    count: u64,
79    policy_evaluated: PolicyEvaluated,
80}