io_smtp/rfc3463/
enhanced_status_code.rs1use core::fmt;
4
5use bounded_static_derive::ToStatic;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, ToStatic)]
11pub struct SmtpEnhancedStatusCode {
12 pub class: u8,
14 pub subject: u16,
16 pub detail: u16,
18}
19
20impl SmtpEnhancedStatusCode {
21 pub fn new(class: u8, subject: u16, detail: u16) -> Option<Self> {
25 if matches!(class, 2 | 4 | 5) && subject < 1000 && detail < 1000 {
26 Some(Self {
27 class,
28 subject,
29 detail,
30 })
31 } else {
32 None
33 }
34 }
35
36 pub fn is_success(&self) -> bool {
38 self.class == 2
39 }
40
41 pub fn is_temporary_failure(&self) -> bool {
43 self.class == 4
44 }
45
46 pub fn is_permanent_failure(&self) -> bool {
48 self.class == 5
49 }
50}
51
52impl fmt::Display for SmtpEnhancedStatusCode {
53 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
54 write!(f, "{}.{}.{}", self.class, self.subject, self.detail)
55 }
56}