node_launchpad/
connection_mode.rs1use std::fmt::{Display, Formatter, Result};
2
3use ant_service_management::NodeServiceData;
4use serde::{Deserialize, Serialize};
5use strum::{Display, EnumIter};
6
7#[derive(Clone, Copy, Debug, Default, EnumIter, Eq, Hash, PartialEq)]
8pub enum ConnectionMode {
9 #[default]
10 Automatic,
11 HomeNetwork,
12 UPnP,
13 CustomPorts,
14}
15
16impl Display for ConnectionMode {
17 fn fmt(&self, f: &mut Formatter) -> Result {
18 match self {
19 ConnectionMode::HomeNetwork => write!(f, "Home Network"),
20 ConnectionMode::UPnP => write!(f, "UPnP"),
21 ConnectionMode::CustomPorts => write!(f, "Custom Ports"),
22 ConnectionMode::Automatic => write!(f, "Automatic"),
23 }
24 }
25}
26
27impl<'de> Deserialize<'de> for ConnectionMode {
28 fn deserialize<D>(deserializer: D) -> std::result::Result<ConnectionMode, D::Error>
29 where
30 D: serde::Deserializer<'de>,
31 {
32 let s = String::deserialize(deserializer)?;
33 match s.as_str() {
34 "Home Network" => Ok(ConnectionMode::HomeNetwork),
35 "UPnP" => Ok(ConnectionMode::UPnP),
36 "Custom Ports" => Ok(ConnectionMode::CustomPorts),
37 "Automatic" => Ok(ConnectionMode::Automatic),
38 _ => Err(serde::de::Error::custom(format!(
39 "Invalid ConnectionMode: {s:?}"
40 ))),
41 }
42 }
43}
44
45impl Serialize for ConnectionMode {
46 fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
47 where
48 S: serde::Serializer,
49 {
50 let s = match self {
51 ConnectionMode::HomeNetwork => "Home Network",
52 ConnectionMode::UPnP => "UPnP",
53 ConnectionMode::CustomPorts => "Custom Ports",
54 ConnectionMode::Automatic => "Automatic",
55 };
56 serializer.serialize_str(s)
57 }
58}
59
60#[derive(Default, Debug, Clone, Serialize, Display)]
61pub enum NodeConnectionMode {
62 UPnP,
63 Relay,
64 Manual,
65 #[default]
66 Unknown,
67}
68
69impl From<&NodeServiceData> for NodeConnectionMode {
70 fn from(nsd: &NodeServiceData) -> Self {
71 match (nsd.upnp, nsd.home_network) {
72 (true, false) => Self::UPnP,
73 (false, true) => Self::Relay,
74 (false, false) => Self::Manual,
75 _ => Self::Unknown,
76 }
77 }
78}