cyfs_lib/router_handler/
chain.rs1use 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}