From 13b6490525ef7cd49da391ac7fedcdc5c9d71a67 Mon Sep 17 00:00:00 2001 From: Chris Beck Date: Sun, 7 Dec 2025 00:02:45 -0700 Subject: [PATCH] improve debug formatting of config --- .../src/gateway/signal_trust_set.rs | 24 ++++++++++++++++--- signal-gateway/src/log_message.rs | 21 +++++++++++++++- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/signal-gateway/src/gateway/signal_trust_set.rs b/signal-gateway/src/gateway/signal_trust_set.rs index d1a9f08..9b80104 100644 --- a/signal-gateway/src/gateway/signal_trust_set.rs +++ b/signal-gateway/src/gateway/signal_trust_set.rs @@ -15,10 +15,16 @@ use std::str::FromStr; use tracing::{debug, info, warn}; /// A validated Signal UUID in the format `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`. -#[derive(Clone, Debug, PartialEq, Eq, Hash, Deserialize)] +#[derive(Clone, PartialEq, Eq, Hash, Deserialize)] #[serde(try_from = "String")] pub struct Uuid(String); +impl fmt::Debug for Uuid { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(&self.0, f) + } +} + impl FromStr for Uuid { type Err = String; @@ -98,10 +104,16 @@ impl fmt::Display for Uuid { } /// A validated Signal safety number (60 digits, optionally separated by whitespace). -#[derive(Clone, Debug, PartialEq, Eq, Hash, Deserialize)] +#[derive(Clone, PartialEq, Eq, Hash, Deserialize)] #[serde(try_from = "String")] pub struct SafetyNumber(String); +impl fmt::Debug for SafetyNumber { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(&self.0, f) + } +} + impl FromStr for SafetyNumber { type Err = String; @@ -175,11 +187,17 @@ impl fmt::Display for SafetyNumber { /// Can be deserialized from either: /// - A map of UUID -> safety numbers: `{"uuid1": ["12345..."], "uuid2": []}` /// - A sequence of UUIDs (no safety numbers): `["uuid1", "uuid2"]` -#[derive(Clone, Debug, Default)] +#[derive(Clone, Default)] pub struct SignalTrustSet { map: HashMap>, } +impl fmt::Debug for SignalTrustSet { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(&self.map, f) + } +} + impl SignalTrustSet { /// Create an empty container. pub fn new() -> Self { diff --git a/signal-gateway/src/log_message.rs b/signal-gateway/src/log_message.rs index 6408b1d..c43ba54 100644 --- a/signal-gateway/src/log_message.rs +++ b/signal-gateway/src/log_message.rs @@ -269,7 +269,7 @@ impl Origin { /// Filter criteria for matching log messages. /// /// All non-empty fields must match for the filter to pass. -#[derive(Clone, Debug, Default, Deserialize)] +#[derive(Clone, Default, Deserialize)] pub struct LogFilter { /// If non-empty, the message must contain this substring. #[serde(default)] @@ -285,6 +285,25 @@ pub struct LogFilter { pub line_equals: String, } +impl std::fmt::Debug for LogFilter { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut s = f.debug_struct("LogFilter"); + if !self.msg_contains.is_empty() { + s.field("msg_contains", &self.msg_contains); + } + if !self.module_equals.is_empty() { + s.field("module_equals", &self.module_equals); + } + if !self.file_equals.is_empty() { + s.field("file_equals", &self.file_equals); + } + if !self.line_equals.is_empty() { + s.field("line_equals", &self.line_equals); + } + s.finish() + } +} + impl LogFilter { /// Check if a log message matches this filter. ///