Skip to main content

deaddrop_core/
mode.rs

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}