#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct OpenConfig {
#[serde(default)]
pub reach: Reach,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Reach {
#[default]
Loopback,
Network,
}
impl Reach {
#[must_use]
pub const fn word(self) -> &'static str {
match self {
Self::Loopback => "loopback",
Self::Network => "network",
}
}
}
impl std::fmt::Display for Reach {
fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
formatter.write_str(self.word())
}
}
impl super::ServerConfig {
#[must_use]
pub fn open_reach(&self) -> Reach {
self.open.map_or(Reach::Loopback, |open| open.reach)
}
}