radix_common/network/
mod.rs1use sbor::rust::prelude::*;
2use sbor::*;
3
4#[derive(Debug, Clone, Sbor, PartialEq, Eq)]
6pub struct NetworkDefinition {
7 pub id: u8,
8 pub logical_name: Cow<'static, str>,
9 pub hrp_suffix: Cow<'static, str>,
10}
11
12impl NetworkDefinition {
15 pub const fn simulator() -> NetworkDefinition {
17 NetworkDefinition {
18 id: 242,
19 logical_name: Cow::Borrowed("simulator"),
20 hrp_suffix: Cow::Borrowed("sim"),
21 }
22 }
23
24 pub const fn localnet() -> NetworkDefinition {
26 NetworkDefinition {
27 id: 240,
28 logical_name: Cow::Borrowed("localnet"),
29 hrp_suffix: Cow::Borrowed("loc"),
30 }
31 }
32
33 pub const fn adapanet() -> NetworkDefinition {
35 NetworkDefinition {
36 id: 0x0a,
37 logical_name: Cow::Borrowed("adapanet"),
38 hrp_suffix: Cow::Borrowed("tdx_a_"),
39 }
40 }
41
42 pub const fn nebunet() -> NetworkDefinition {
44 NetworkDefinition {
45 id: 0x0b,
46 logical_name: Cow::Borrowed("nebunet"),
47 hrp_suffix: Cow::Borrowed("tdx_b_"),
48 }
49 }
50
51 pub const fn kisharnet() -> NetworkDefinition {
53 NetworkDefinition {
54 id: 0x0c,
55 logical_name: Cow::Borrowed("kisharnet"),
56 hrp_suffix: Cow::Borrowed("tdx_c_"),
57 }
58 }
59
60 pub const fn ansharnet() -> NetworkDefinition {
62 NetworkDefinition {
63 id: 0x0d,
64 logical_name: Cow::Borrowed("ansharnet"),
65 hrp_suffix: Cow::Borrowed("tdx_d_"),
66 }
67 }
68
69 pub const fn zabanet() -> NetworkDefinition {
71 NetworkDefinition {
72 id: 0x0e,
73 logical_name: Cow::Borrowed("zabanet"),
74 hrp_suffix: Cow::Borrowed("tdx_e_"),
75 }
76 }
77
78 pub const fn stokenet() -> NetworkDefinition {
79 NetworkDefinition {
80 id: 2,
81 logical_name: Cow::Borrowed("stokenet"),
82 hrp_suffix: Cow::Borrowed("tdx_2_"),
83 }
84 }
85
86 pub const fn mainnet() -> NetworkDefinition {
87 NetworkDefinition {
88 id: 1,
89 logical_name: Cow::Borrowed("mainnet"),
90 hrp_suffix: Cow::Borrowed("rdx"),
91 }
92 }
93}
94
95impl FromStr for NetworkDefinition {
96 type Err = ParseNetworkError;
97
98 fn from_str(s: &str) -> Result<Self, Self::Err> {
99 match s.to_lowercase().as_str() {
100 "simulator" => Ok(NetworkDefinition::simulator()),
101 "adapanet" => Ok(NetworkDefinition::adapanet()),
102 "nebunet" => Ok(NetworkDefinition::nebunet()),
103 "kisharnet" => Ok(NetworkDefinition::kisharnet()),
104 "ansharnet" => Ok(NetworkDefinition::ansharnet()),
105 "zabanet" => Ok(NetworkDefinition::zabanet()),
106 "stokenet" => Ok(NetworkDefinition::stokenet()),
107 "mainnet" => Ok(NetworkDefinition::mainnet()),
108 _ => Err(ParseNetworkError::InvalidNetworkString),
109 }
110 }
111}
112
113#[derive(Debug)]
114pub enum ParseNetworkError {
115 InvalidNetworkString,
116}
117
118#[cfg(test)]
119mod tests {
120 use super::*;
121 use crate::internal_prelude::*;
122
123 #[test]
124 fn network_from_string_fail() {
125 assert_matches!(
126 NetworkDefinition::from_str("non_existing_network").unwrap_err(),
127 ParseNetworkError::InvalidNetworkString
128 );
129 }
130
131 #[test]
132 fn network_ids() {
133 let array = [
134 ("mainnet", 1),
135 ("Simulator", 242),
136 ("Adapanet", 10),
137 ("NEBUNET", 11),
138 ("Kisharnet", 12),
139 ("ansharnet", 13),
140 ("zabanet", 14),
141 ];
142
143 for (name, id) in array {
144 assert_eq!(NetworkDefinition::from_str(name).unwrap().id, id)
145 }
146 }
147}