rocketmq_remoting/code/
broker_request_code.rs1use 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}