From fda5d3fa6a5d78f7a7428ce496bc0ff73ca2d2a1 Mon Sep 17 00:00:00 2001 From: Arthur LE MOIGNE Date: Mon, 11 Dec 2023 17:35:16 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Better=20debug=20impl=20for=20Logge?= =?UTF-8?q?r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- quickfix/src/log_factory.rs | 19 ++++++++++++++++--- quickfix/tests/test_debug.rs | 23 +++++++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/quickfix/src/log_factory.rs b/quickfix/src/log_factory.rs index 7443939..6a39a41 100644 --- a/quickfix/src/log_factory.rs +++ b/quickfix/src/log_factory.rs @@ -1,5 +1,5 @@ use std::{ - ffi, + ffi, fmt, io::{self, Write}, marker::PhantomData, mem::ManuallyDrop, @@ -27,7 +27,6 @@ pub trait LogCallback { } /// Logging factory. -#[derive(Debug)] pub struct LogFactory<'a, C: LogCallback>(pub(crate) FixLogFactory_t, PhantomData<&'a C>); impl<'a, C> LogFactory<'a, C> @@ -87,6 +86,12 @@ where } } +impl<'a, C: LogCallback> fmt::Debug for LogFactory<'a, C> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_tuple("LogFactory").finish() + } +} + impl Drop for LogFactory<'_, C> { fn drop(&mut self) { unsafe { FixLogFactory_delete(self.0) } @@ -100,7 +105,6 @@ pub struct NullLogger; impl LogCallback for NullLogger {} /// Log message to std file descriptors. -#[derive(Debug)] pub enum StdLogger { /// Log to stdout. Stdout, @@ -108,6 +112,15 @@ pub enum StdLogger { Stderr, } +impl fmt::Debug for StdLogger { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Stdout => write!(f, "log_stdout"), + Self::Stderr => write!(f, "log_stderr"), + } + } +} + impl StdLogger { fn print(&self, text: &str) { let _ = match self { diff --git a/quickfix/tests/test_debug.rs b/quickfix/tests/test_debug.rs index a116180..f4402e8 100644 --- a/quickfix/tests/test_debug.rs +++ b/quickfix/tests/test_debug.rs @@ -29,3 +29,26 @@ fn test_group() { let obj = Group::try_new(42, 10).unwrap(); assert_eq!(format!("{obj:?}"), "Group { id: 42, delim: 10 }"); } + +#[test] +fn test_log_factory() { + let obj = LogFactory::try_new(&NullLogger).unwrap(); + assert_eq!(format!("{obj:?}"), "LogFactory"); +} + +#[test] +fn test_logger() { + let obj = NullLogger; + assert_eq!(format!("{obj:?}"), "NullLogger"); + + let obj = StdLogger::Stdout; + assert_eq!(format!("{obj:?}"), "log_stdout"); + let obj = StdLogger::Stderr; + assert_eq!(format!("{obj:?}"), "log_stderr"); + + #[cfg(feature = "log")] + { + let obj = RustLogger; + assert_eq!(format!("{obj:?}"), "RustLogger"); + } +}