From 72a3e5a188d86f7775313b657b806adb369c93a3 Mon Sep 17 00:00:00 2001 From: pep Date: Thu, 1 Jan 2026 01:18:45 +0100 Subject: [PATCH] config: custom deserializer for nickname It looks like the current toml crate doesn't allow borrowed strings? See https://gitlab.com/xmpp-rs/xmpp-rs/-/merge_requests/638. This is happening after xmpp-rs' 60bf821c63. Signed-off-by: pep --- src/config.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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) }