Skip to main content

zero_bounce/utility/structures/
validate_enums.rs

1//! Validation status and sub-status enums for API responses.
2//!
3//! Use for type-safe comparison. Unknown/future API values map to `Unknown(String)`.
4
5use std::str::FromStr;
6
7/// Validation status values returned by the API (validate, validate_batch).
8/// Parse from string: `let s: ZBValidateStatus = response.status.parse().unwrap_or(ZBValidateStatus::Unknown(response.status.clone()));`
9#[derive(Debug, Clone, PartialEq, Eq)]
10pub enum ZBValidateStatus {
11    None,
12    Valid,
13    Invalid,
14    CatchAll,
15    Unknown,
16    Spamtrap,
17    Abuse,
18    DoNotMail,
19    /// Unknown or future API value (backward compatible)
20    UnknownValue(String),
21}
22
23impl FromStr for ZBValidateStatus {
24    type Err = std::convert::Infallible;
25
26    fn from_str(s: &str) -> Result<Self, Self::Err> {
27        Ok(match s {
28            "" => ZBValidateStatus::None,
29            "valid" => ZBValidateStatus::Valid,
30            "invalid" => ZBValidateStatus::Invalid,
31            "catch-all" => ZBValidateStatus::CatchAll,
32            "unknown" => ZBValidateStatus::Unknown,
33            "spamtrap" => ZBValidateStatus::Spamtrap,
34            "abuse" => ZBValidateStatus::Abuse,
35            "do_not_mail" => ZBValidateStatus::DoNotMail,
36            other => ZBValidateStatus::UnknownValue(other.to_string()),
37        })
38    }
39}
40
41/// Validation sub-status values returned by the API (validate, validate_batch).
42#[derive(Debug, Clone, PartialEq, Eq)]
43pub enum ZBValidateSubStatus {
44    None,
45    AntispamSystem,
46    Greylisted,
47    MailServerTemporaryError,
48    ForcibleDisconnect,
49    MailServerDidNotRespond,
50    TimeoutExceeded,
51    FailedSmtpConnection,
52    MailboxQuotaExceeded,
53    ExceptionOccurred,
54    PossibleTrap,
55    RoleBased,
56    GlobalSuppression,
57    MailboxNotFound,
58    NoDnsEntries,
59    FailedSyntaxCheck,
60    PossibleTypo,
61    UnroutableIpAddress,
62    LeadingPeriodRemoved,
63    DoesNotAcceptMail,
64    AliasAddress,
65    RoleBasedCatchAll,
66    Disposable,
67    Toxic,
68    Alternate,
69    MxForward,
70    Blocked,
71    Allowed,
72    AcceptAll,
73    RoleBasedAcceptAll,
74    Gold,
75    /// Unknown or future API value (backward compatible)
76    UnknownValue(String),
77}
78
79impl FromStr for ZBValidateSubStatus {
80    type Err = std::convert::Infallible;
81
82    fn from_str(s: &str) -> Result<Self, Self::Err> {
83        Ok(match s {
84            "" => ZBValidateSubStatus::None,
85            "antispam_system" => ZBValidateSubStatus::AntispamSystem,
86            "greylisted" => ZBValidateSubStatus::Greylisted,
87            "mail_server_temporary_error" => ZBValidateSubStatus::MailServerTemporaryError,
88            "forcible_disconnect" => ZBValidateSubStatus::ForcibleDisconnect,
89            "mail_server_did_not_respond" => ZBValidateSubStatus::MailServerDidNotRespond,
90            "timeout_exceeded" => ZBValidateSubStatus::TimeoutExceeded,
91            "failed_smtp_connection" => ZBValidateSubStatus::FailedSmtpConnection,
92            "mailbox_quota_exceeded" => ZBValidateSubStatus::MailboxQuotaExceeded,
93            "exception_occurred" => ZBValidateSubStatus::ExceptionOccurred,
94            "possible_trap" => ZBValidateSubStatus::PossibleTrap,
95            "role_based" => ZBValidateSubStatus::RoleBased,
96            "global_suppression" => ZBValidateSubStatus::GlobalSuppression,
97            "mailbox_not_found" => ZBValidateSubStatus::MailboxNotFound,
98            "no_dns_entries" => ZBValidateSubStatus::NoDnsEntries,
99            "failed_syntax_check" => ZBValidateSubStatus::FailedSyntaxCheck,
100            "possible_typo" => ZBValidateSubStatus::PossibleTypo,
101            "unroutable_ip_address" => ZBValidateSubStatus::UnroutableIpAddress,
102            "leading_period_removed" => ZBValidateSubStatus::LeadingPeriodRemoved,
103            "does_not_accept_mail" => ZBValidateSubStatus::DoesNotAcceptMail,
104            "alias_address" => ZBValidateSubStatus::AliasAddress,
105            "role_based_catch_all" => ZBValidateSubStatus::RoleBasedCatchAll,
106            "disposable" => ZBValidateSubStatus::Disposable,
107            "toxic" => ZBValidateSubStatus::Toxic,
108            "alternate" => ZBValidateSubStatus::Alternate,
109            "mx_forward" => ZBValidateSubStatus::MxForward,
110            "blocked" => ZBValidateSubStatus::Blocked,
111            "allowed" => ZBValidateSubStatus::Allowed,
112            "accept_all" => ZBValidateSubStatus::AcceptAll,
113            "role_based_accept_all" => ZBValidateSubStatus::RoleBasedAcceptAll,
114            "gold" => ZBValidateSubStatus::Gold,
115            other => ZBValidateSubStatus::UnknownValue(other.to_string()),
116        })
117    }
118}