Skip to content

Commit

Permalink
✨ Better debug impl for Logger
Browse files Browse the repository at this point in the history
  • Loading branch information
arthurlm committed Dec 11, 2023
1 parent 371d1a2 commit fda5d3f
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 3 deletions.
19 changes: 16 additions & 3 deletions quickfix/src/log_factory.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::{
ffi,
ffi, fmt,
io::{self, Write},
marker::PhantomData,
mem::ManuallyDrop,
Expand Down Expand Up @@ -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>
Expand Down Expand Up @@ -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<C: LogCallback> Drop for LogFactory<'_, C> {
fn drop(&mut self) {
unsafe { FixLogFactory_delete(self.0) }
Expand All @@ -100,14 +105,22 @@ pub struct NullLogger;
impl LogCallback for NullLogger {}

/// Log message to std file descriptors.
#[derive(Debug)]
pub enum StdLogger {
/// Log to stdout.
Stdout,
/// Log to stderr.
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 {
Expand Down
23 changes: 23 additions & 0 deletions quickfix/tests/test_debug.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}
}

0 comments on commit fda5d3f

Please sign in to comment.