cyfs_lib/router_handler/
chain.rs

1use cyfs_base::{BuckyError, BuckyErrorCode, BuckyResult};
2
3
4use std::fmt;
5use std::str::FromStr;
6
7
8#[derive(Clone, Copy, Hash, Eq, PartialEq)]
9pub enum RouterHandlerChain {
10    PreNOC,
11    PostNOC,
12
13    PreRouter,
14    PostRouter,
15
16    PreForward,
17    PostForward,
18
19    PreCrypto,
20    PostCrypto,
21
22    Handler,
23
24    Acl, 
25
26    NDN,
27}
28
29impl RouterHandlerChain {
30    pub fn as_str(&self) -> &str {
31        match &*self {
32            Self::PreNOC => "pre_noc",
33            Self::PostNOC => "post_noc",
34
35            Self::PreRouter => "pre_router",
36            Self::PostRouter => "post_router",
37
38            Self::PreForward => "pre_forward",
39            Self::PostForward => "post_forward",
40
41            Self::PreCrypto => "pre_crypto",
42            Self::PostCrypto => "post_crypto",
43
44            Self::Handler => "handler",
45
46            Self::Acl => "acl",
47
48            Self::NDN => "ndn"
49        }
50    }
51}
52impl fmt::Debug for RouterHandlerChain {
53    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
54        write!(f, "{}", self.as_str())
55    }
56}
57impl fmt::Display for RouterHandlerChain {
58    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
59        write!(f, "{}", self.as_str())
60    }
61}
62
63impl FromStr for RouterHandlerChain {
64    type Err = BuckyError;
65    fn from_str(s: &str) -> BuckyResult<Self> {
66        let ret = match s {
67            "pre_noc" => Self::PreNOC,
68            "post_noc" => Self::PostNOC,
69
70            "pre_router" => Self::PreRouter,
71            "post_router" => Self::PostRouter,
72
73            "pre_forward" => Self::PreForward,
74            "post_forward" => Self::PostForward,
75
76            "pre_crypto" => Self::PreCrypto,
77            "post_crypto" => Self::PostCrypto,
78
79            "handler" => Self::Handler,
80            
81            "acl" => Self::Acl, 
82
83            "ndn" => Self::NDN, 
84            
85            v @ _ => {
86                let msg = format!("unknown router chain: {}", v);
87                error!("{}", msg);
88
89                return Err(BuckyError::new(BuckyErrorCode::UnSupport, msg));
90            }
91        };
92
93        Ok(ret)
94    }
95}