From dba27b4402648b6a9272cda681ab8caaeb5d279d Mon Sep 17 00:00:00 2001 From: HampusM Date: Tue, 25 Oct 2022 21:51:46 +0200 Subject: refactor: add Debug implementations for castable factories --- src/castable_factory/blocking.rs | 33 +++++++++++++++++++++++++++++++++ src/castable_factory/threadsafe.rs | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) (limited to 'src/castable_factory') diff --git a/src/castable_factory/blocking.rs b/src/castable_factory/blocking.rs index 9ef9864..48f426d 100644 --- a/src/castable_factory/blocking.rs +++ b/src/castable_factory/blocking.rs @@ -1,3 +1,6 @@ +use std::any::type_name; +use std::fmt::Debug; + use crate::interfaces::any_factory::AnyFactory; use crate::interfaces::factory::IFactory; use crate::ptr::TransientPtr; @@ -73,6 +76,36 @@ where { } +impl Debug for CastableFactory +where + Args: 'static, + ReturnInterface: 'static + ?Sized, +{ + #[cfg(not(tarpaulin_include))] + fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result + { + let mut args = type_name::(); + + if args.len() < 2 { + return Err(std::fmt::Error::default()); + } + + args = args + .get(1..args.len() - 1) + .map_or_else(|| Err(std::fmt::Error::default()), Ok)?; + + if args.ends_with(',') { + args = args + .get(..args.len() - 1) + .map_or_else(|| Err(std::fmt::Error), Ok)?; + } + + let ret = type_name::>(); + + formatter.write_fmt(format_args!("CastableFactory ({}) -> {}", args, ret)) + } +} + #[cfg(test)] mod tests { diff --git a/src/castable_factory/threadsafe.rs b/src/castable_factory/threadsafe.rs index 8f9c072..c1a90c4 100644 --- a/src/castable_factory/threadsafe.rs +++ b/src/castable_factory/threadsafe.rs @@ -1,3 +1,6 @@ +use std::any::type_name; +use std::fmt::Debug; + use crate::interfaces::any_factory::{AnyFactory, AnyThreadsafeFactory}; use crate::interfaces::factory::IThreadsafeFactory; use crate::ptr::TransientPtr; @@ -86,6 +89,39 @@ where { } +impl Debug for ThreadsafeCastableFactory +where + Args: 'static, + ReturnInterface: 'static + ?Sized, +{ + #[cfg(not(tarpaulin_include))] + fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result + { + let mut args = type_name::(); + + if args.len() < 2 { + return Err(std::fmt::Error::default()); + } + + args = args + .get(1..args.len() - 1) + .map_or_else(|| Err(std::fmt::Error::default()), Ok)?; + + if args.ends_with(',') { + args = args + .get(..args.len() - 1) + .map_or_else(|| Err(std::fmt::Error), Ok)?; + } + + let ret = type_name::>(); + + formatter.write_fmt(format_args!( + "ThreadsafeCastableFactory ({}) -> {}", + args, ret + )) + } +} + #[cfg(test)] mod tests { -- cgit v1.2.3-18-g5258