1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]
4#[serde(rename_all = "snake_case")]
5pub enum NodeMode {
6 Performance,
7 #[default]
8 Balanced,
9 Battery,
10 Offline,
11 RelayOnly,
12 Private,
13}
14
15impl NodeMode {
16 pub fn discovery_enabled(self) -> bool {
17 !matches!(self, Self::Offline | Self::Private)
18 }
19
20 pub fn unsolicited_relay(self) -> bool {
21 matches!(self, Self::Performance | Self::Balanced | Self::RelayOnly)
22 }
23
24 pub fn retain_encounters(self) -> bool {
25 !matches!(self, Self::Private | Self::Offline)
26 }
27}
28
29#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]
30#[serde(rename_all = "snake_case")]
31pub enum NodeRole {
32 #[default]
33 Personal,
34 Mobile,
35 Relay,
36 Gateway,
37 Archive,
38 Edge,
39 Bridge,
40}
41
42impl NodeRole {
43 pub fn from_str_role(s: &str) -> Option<Self> {
44 Some(match s {
45 "personal" => Self::Personal,
46 "mobile" => Self::Mobile,
47 "relay" => Self::Relay,
48 "gateway" => Self::Gateway,
49 "archive" => Self::Archive,
50 "edge" => Self::Edge,
51 "bridge" => Self::Bridge,
52 _ => return None,
53 })
54 }
55}