Skip to content

Commit 6bcb357

Browse files
committed
Receive formatter parameter as generic if dyn-compatible is not required
1 parent 9a61486 commit 6bcb357

File tree

15 files changed

+60
-54
lines changed

15 files changed

+60
-54
lines changed

spdlog/benches/spdlog-rs/pattern.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,10 @@ fn bench_pattern(bencher: &mut Bencher, pattern: impl Pattern + Clone + 'static)
8888
}
8989

9090
fn bench_full_pattern(bencher: &mut Bencher, pattern: impl Pattern + Clone + 'static) {
91-
let full_formatter = Arc::new(StringSink::with(|b| {
92-
b.formatter(Box::new(FullFormatter::new()))
93-
}));
91+
let full_formatter = Arc::new(StringSink::with(|b| b.formatter(FullFormatter::new())));
9492

9593
let full_pattern = Arc::new(StringSink::with(|b| {
96-
b.formatter(Box::new(PatternFormatter::new(pattern.clone())))
94+
b.formatter(PatternFormatter::new(pattern.clone()))
9795
}));
9896

9997
let combination =

spdlog/src/formatter/pattern_formatter/mod.rs

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,7 @@ use crate::{
7373
#[doc = include_str!(concat!(env!("OUT_DIR"), "/test_utils/common_for_doc_test.rs"))]
7474
///
7575
/// let formatter = PatternFormatter::new(pattern!("[{level}] {payload}{eol}"));
76-
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(
77-
/// # Box::new(formatter),
78-
/// # None
79-
/// # );
76+
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(formatter, None);
8077
///
8178
/// info!(logger: doctest, "Interesting log message");
8279
/// # assert_eq!(
@@ -98,10 +95,7 @@ use crate::{
9895
/// # };
9996
#[doc = include_str!(concat!(env!("OUT_DIR"), "/test_utils/common_for_doc_test.rs"))]
10097
/// let formatter = PatternFormatter::new(pattern!("[{{escaped}}] {payload}{eol}"));
101-
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(
102-
/// # Box::new(formatter),
103-
/// # None
104-
/// # );
98+
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(formatter, None);
10599
///
106100
/// info!(logger: doctest, "Interesting log message");
107101
/// # assert_eq!(
@@ -127,10 +121,7 @@ use crate::{
127121
/// # };
128122
#[doc = include_str!(concat!(env!("OUT_DIR"), "/test_utils/common_for_doc_test.rs"))]
129123
/// let formatter = PatternFormatter::new(pattern!("{^[{level}]} {payload}{eol}"));
130-
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(
131-
/// # Box::new(formatter),
132-
/// # None
133-
/// # );
124+
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(formatter, None);
134125
///
135126
/// info!(logger: doctest, "Interesting log message");
136127
/// # assert_eq!(
@@ -169,10 +160,7 @@ use crate::{
169160
/// {$mypat} => MyPattern::default,
170161
/// );
171162
/// let formatter = PatternFormatter::new(pat);
172-
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(
173-
/// # Box::new(formatter),
174-
/// # None
175-
/// # );
163+
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(formatter, None);
176164
///
177165
/// info!(logger: doctest, "Interesting log message");
178166
/// # assert_eq!(
@@ -233,10 +221,7 @@ use crate::{
233221
/// {$mypat} => MyPattern::new,
234222
/// );
235223
/// let formatter = PatternFormatter::new(pat);
236-
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(
237-
/// # Box::new(formatter),
238-
/// # None
239-
/// # );
224+
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(formatter, None);
240225
///
241226
/// info!(logger: doctest, "Interesting log message");
242227
/// # assert_eq!(

spdlog/src/formatter/pattern_formatter/runtime.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,7 @@ pub use spdlog_macros::runtime_pattern;
7070
#[doc = include_str!(concat!(env!("OUT_DIR"), "/test_utils/common_for_doc_test.rs"))]
7171
/// # fn main() -> Result<(), Box<dyn std::error::Error>> {
7272
/// let formatter = PatternFormatter::new(runtime_pattern!("[{level}] {payload}{eol}")?);
73-
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(
74-
/// # Box::new(formatter),
75-
/// # None
76-
/// # );
73+
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(formatter, None);
7774
///
7875
/// info!(logger: doctest, "Interesting log message");
7976
/// # assert_eq!(
@@ -114,10 +111,7 @@ pub use spdlog_macros::runtime_pattern;
114111
/// {$mypat2} => pat
115112
/// )?
116113
/// );
117-
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(
118-
/// # Box::new(formatter),
119-
/// # None
120-
/// # );
114+
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(formatter, None);
121115
///
122116
/// info!(logger: doctest, "Interesting log message");
123117
/// # assert_eq!(

spdlog/src/sink/async_sink/async_pool_sink.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ impl AsyncPoolSink {
7272
// AsyncPoolSink does not have its own formatter, and we do not impl
7373
// `GetSinkProp` for it, so there should be no way to access the
7474
// formatter inside the `prop`.
75-
prop.set_formatter(Box::new(UnreachableFormatter::new()));
75+
prop.set_formatter(UnreachableFormatter::new());
7676

7777
AsyncPoolSinkBuilder {
7878
prop,
@@ -210,7 +210,10 @@ impl AsyncPoolSinkBuilder {
210210
///
211211
/// This parameter is **optional**.
212212
#[must_use]
213-
pub fn formatter(self, formatter: Box<dyn Formatter>) -> Self {
213+
pub fn formatter<F>(self, formatter: F) -> Self
214+
where
215+
F: Formatter + 'static,
216+
{
214217
self.prop.set_formatter(formatter);
215218
self
216219
}

spdlog/src/sink/dedup_sink.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ struct DedupSinkState {
3838
/// # fn main() -> Result<(), spdlog::Error> {
3939
/// # let underlying_sink = Arc::new(
4040
/// # WriteSink::builder()
41-
/// # .formatter(Box::new(PatternFormatter::new(pattern!("{payload}\n"))))
41+
/// # .formatter(PatternFormatter::new(pattern!("{payload}\n")))
4242
/// # .target(Vec::new())
4343
/// # .build()?
4444
/// # );
@@ -254,7 +254,10 @@ impl<ArgS> DedupSinkBuilder<ArgS> {
254254
///
255255
/// This parameter is **optional**.
256256
#[must_use]
257-
pub fn formatter(self, formatter: Box<dyn Formatter>) -> Self {
257+
pub fn formatter<F>(self, formatter: F) -> Self
258+
where
259+
F: Formatter + 'static,
260+
{
258261
self.prop.set_formatter(formatter);
259262
self
260263
}

spdlog/src/sink/file_sink.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,10 @@ impl<ArgPath> FileSinkBuilder<ArgPath> {
187187
///
188188
/// This parameter is **optional**.
189189
#[must_use]
190-
pub fn formatter(self, formatter: Box<dyn Formatter>) -> Self {
190+
pub fn formatter<F>(self, formatter: F) -> Self
191+
where
192+
F: Formatter + 'static,
193+
{
191194
self.prop.set_formatter(formatter);
192195
self
193196
}

spdlog/src/sink/journald_sink.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ impl JournaldSink {
109109
#[must_use]
110110
pub fn builder() -> JournaldSinkBuilder {
111111
let prop = SinkProp::default();
112-
prop.set_formatter(Box::new(JournaldFormatter::new()));
112+
prop.set_formatter(JournaldFormatter::new());
113113

114114
JournaldSinkBuilder { prop }
115115
}
@@ -175,7 +175,10 @@ impl JournaldSinkBuilder {
175175
///
176176
/// This parameter is **optional**.
177177
#[must_use]
178-
pub fn formatter(self, formatter: Box<dyn Formatter>) -> Self {
178+
pub fn formatter<F>(self, formatter: F) -> Self
179+
where
180+
F: Formatter + 'static,
181+
{
179182
self.prop.set_formatter(formatter);
180183
self
181184
}

spdlog/src/sink/mod.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,14 @@ impl SinkProp {
103103
}
104104

105105
/// Sets the formatter.
106-
pub fn set_formatter(&self, formatter: Box<dyn Formatter>) {
106+
pub fn set_formatter<F>(&self, formatter: F)
107+
where
108+
F: Formatter + 'static,
109+
{
110+
self.set_formatter_boxed(Box::new(formatter));
111+
}
112+
113+
pub fn set_formatter_boxed(&self, formatter: Box<dyn Formatter>) {
107114
*self.formatter.write() = formatter;
108115
}
109116

@@ -173,7 +180,7 @@ impl<S: GetSinkProp> SinkAccess for S {
173180
}
174181

175182
fn set_formatter(&self, formatter: Box<dyn Formatter>) {
176-
self.prop().set_formatter(formatter);
183+
self.prop().set_formatter_boxed(formatter);
177184
}
178185

179186
fn set_error_handler(&self, handler: Option<ErrorHandler>) {

spdlog/src/sink/rotating_file_sink.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -815,7 +815,10 @@ impl<ArgBP, ArgRP> RotatingFileSinkBuilder<ArgBP, ArgRP> {
815815
///
816816
/// This parameter is **optional**.
817817
#[must_use]
818-
pub fn formatter(self, formatter: Box<dyn Formatter>) -> Self {
818+
pub fn formatter<F>(self, formatter: F) -> Self
819+
where
820+
F: Formatter + 'static,
821+
{
819822
self.prop.set_formatter(formatter);
820823
self
821824
}

spdlog/src/sink/std_stream_sink.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,10 @@ impl<ArgSS> StdStreamSinkBuilder<ArgSS> {
273273
///
274274
/// This parameter is **optional**.
275275
#[must_use]
276-
pub fn formatter(self, formatter: Box<dyn Formatter>) -> Self {
276+
pub fn formatter<F>(self, formatter: F) -> Self
277+
where
278+
F: Formatter + 'static,
279+
{
277280
self.prop.set_formatter(formatter);
278281
self
279282
}

0 commit comments

Comments
 (0)