rocketmq_remoting/code/
broker_request_code.rs

1use std::str::FromStr;
2
3use rocketmq_error::RocketmqError::FromStrErr;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
6pub enum BrokerRequestCode {
7    RegisterBroker = 103,
8    BrokerHeartbeat = 904,
9    GetBrokerClusterInfo = 106,
10}
11
12impl BrokerRequestCode {
13    pub fn value_of(code: i32) -> Option<Self> {
14        match code {
15            103 => Some(BrokerRequestCode::RegisterBroker),
16            106 => Some(BrokerRequestCode::GetBrokerClusterInfo),
17            _ => None,
18        }
19    }
20
21    pub fn get_code(&self) -> i32 {
22        *self as i32
23    }
24
25    pub fn get_type_from_name(name: &str) -> Option<Self> {
26        match name.to_ascii_uppercase().as_str() {
27            "REGISTERBROKER" => Some(BrokerRequestCode::RegisterBroker),
28            "BROKERHEARTBEAT" => Some(BrokerRequestCode::BrokerHeartbeat),
29            "GETBROKERCLUSTERINFO" => Some(BrokerRequestCode::GetBrokerClusterInfo),
30            _ => None,
31        }
32    }
33}
34
35impl FromStr for BrokerRequestCode {
36    type Err = rocketmq_error::RocketmqError;
37
38    fn from_str(s: &str) -> Result<Self, Self::Err> {
39        match s.to_ascii_uppercase().as_str() {
40            "REGISTERBROKER" => Ok(BrokerRequestCode::RegisterBroker),
41            "BROKERHEARTBEAT" => Ok(BrokerRequestCode::BrokerHeartbeat),
42            "GETBROKERCLUSTERINFO" => Ok(BrokerRequestCode::GetBrokerClusterInfo),
43            _ => Err(FromStrErr(format!(
44                "Parse from string error,Invalid BrokerRequestCode: {s}"
45            ))),
46        }
47    }
48}
49
50#[cfg(test)]
51mod tests {
52    use super::*;
53
54    #[test]
55    fn test_value_of() {
56        let code: i32 = 103;
57        assert_eq!(
58            BrokerRequestCode::value_of(code),
59            Some(BrokerRequestCode::RegisterBroker)
60        );
61
62        let code: i32 = 1;
63        assert_eq!(BrokerRequestCode::value_of(code), None);
64    }
65
66    #[test]
67    fn test_get_type_from_name() {
68        let name = "RegisterBroker";
69        assert_eq!(
70            BrokerRequestCode::get_type_from_name(name),
71            Some(BrokerRequestCode::RegisterBroker)
72        );
73
74        let name = "UNKNOW";
75        assert_eq!(BrokerRequestCode::get_type_from_name(name), None);
76    }
77}