kumo_dmarc/types/
results.rs1use 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}