diff --git a/src/config.rs b/src/config.rs index 81a8e82..0402a07 100644 --- a/src/config.rs +++ b/src/config.rs @@ -18,7 +18,7 @@ use std::net::{IpAddr, Ipv6Addr, SocketAddr}; use camino::{Utf8Path, Utf8PathBuf}; use log::debug; -use serde::{Deserialize, Serialize}; +use serde::{Deserialize, Deserializer, Serialize}; use xmpp::jid::{BareJid, ResourcePart}; use crate::error::Error; @@ -41,6 +41,7 @@ pub struct Config { /// Nickname to use in rooms #[serde(default = "Config::default_nickname")] + #[serde(deserialize_with = "Config::owned_nickname")] pub nickname: ResourcePart, /// Secret that matches the one provided to the Webhook service @@ -57,6 +58,16 @@ impl Config { ResourcePart::new("cusku").unwrap().into() } + pub fn owned_nickname<'de, D>(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + Ok(ResourcePart::new(&s) + .map_err(serde::de::Error::custom)? + .into_owned()) + } + pub fn default_addr() -> SocketAddr { SocketAddr::new(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1)), 3000) }