1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
use std::str::FromStr;

#[derive(Clone, Debug, Eq, PartialEq)]
pub enum Event {
    LinkAuth,
    LinkConnect,
    LinkDisconnect,
    LinkGreeting,
    LinkIdentify,
    LinkTls,
    TxBegin,
    TxMail,
    TxReset,
    TxRcpt,
    TxEnvelope,
    TxData,
    TxCommit,
    TxRollback,
    ProtocolClient,
    ProtocolServer,
    FilterResponse,
    FilterReport,
    Timeout,
}

impl ToString for Event {
    fn to_string(&self) -> String {
        match self {
            Event::LinkAuth => String::from("link-auth"),
            Event::LinkConnect => String::from("link-connect"),
            Event::LinkDisconnect => String::from("link-disconnect"),
            Event::LinkGreeting => String::from("link-greeting"),
            Event::LinkIdentify => String::from("link-identify"),
            Event::LinkTls => String::from("link-tls"),
            Event::TxBegin => String::from("tx-begin"),
            Event::TxMail => String::from("tx-mail"),
            Event::TxReset => String::from("tx-reset"),
            Event::TxRcpt => String::from("tx-rcpt"),
            Event::TxEnvelope => String::from("tx-envelope"),
            Event::TxData => String::from("tx-data"),
            Event::TxCommit => String::from("tx-commit"),
            Event::TxRollback => String::from("tx-rollback"),
            Event::ProtocolClient => String::from("protocol-client"),
            Event::ProtocolServer => String::from("protocol-server"),
            Event::FilterResponse => String::from("filter-response"),
            Event::FilterReport => String::from("filter-report"),
            Event::Timeout => String::from("timeout"),
        }
    }
}

impl FromStr for Event {
    type Err = ();

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s {
            "link-auth" => Ok(Event::LinkAuth),
            "link-connect" => Ok(Event::LinkConnect),
            "link-disconnect" => Ok(Event::LinkDisconnect),
            "link-greeting" => Ok(Event::LinkGreeting),
            "link-identify" => Ok(Event::LinkIdentify),
            "link-tls" => Ok(Event::LinkTls),
            "tx-begin" => Ok(Event::TxBegin),
            "tx-mail" => Ok(Event::TxMail),
            "tx-reset" => Ok(Event::TxReset),
            "tx-rcpt" => Ok(Event::TxRcpt),
            "tx-envelope" => Ok(Event::TxEnvelope),
            "tx-data" => Ok(Event::TxData),
            "tx-commit" => Ok(Event::TxCommit),
            "tx-rollback" => Ok(Event::TxRollback),
            "protocol-client" => Ok(Event::ProtocolClient),
            "protocol-server" => Ok(Event::ProtocolServer),
            "filter-response" => Ok(Event::FilterResponse),
            "filter-report" => Ok(Event::FilterReport),
            "timeout" => Ok(Event::Timeout),
            _ => Err(()),
        }
    }
}