Skip to content

Commit 87873af

Browse files
committed
Make Level and LevelFilter Copy
This makes both structs easier to use because you no longer have to worry about borrow errors while working with them. There's no downside to making them `Copy` since both are wrappers around a `usize`. Ideally, this would make `Metadata::Level` return `Level` instead of `&Level`. However that's a breaking change, so I didn't make it here.
1 parent a8cc977 commit 87873af

File tree

8 files changed

+26
-26
lines changed

8 files changed

+26
-26
lines changed

tracing-core/src/metadata.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ pub struct Metadata<'a> {
9494
pub struct Kind(KindInner);
9595

9696
/// Describes the level of verbosity of a span or event.
97-
#[derive(Clone, Debug, PartialEq, Eq)]
97+
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
9898
pub struct Level(LevelInner);
9999

100100
/// A filter comparable to a verbosity `Level`.
@@ -107,7 +107,7 @@ pub struct Level(LevelInner);
107107
/// addition of an `OFF` level that completely disables all trace
108108
/// instrumentation.
109109
#[repr(transparent)]
110-
#[derive(Clone, Eq, PartialEq)]
110+
#[derive(Copy, Clone, Eq, PartialEq)]
111111
pub struct LevelFilter(Option<Level>);
112112

113113
/// Indicates that a string could not be parsed to a valid level.
@@ -864,7 +864,7 @@ mod tests {
864864
// actual repr matches what we expect it to be --- we're testing
865865
// that *other* unsafe code is sound using the transmuted value.
866866
// We're not going to do anything with it that might be unsound.
867-
mem::transmute::<_, usize>(filter.clone())
867+
mem::transmute::<_, usize>(filter)
868868
};
869869
assert_eq!(expected, repr, "repr changed for {:?}", filter)
870870
}

tracing-log/src/lib.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,8 @@ lazy_static! {
310310
static ref ERROR_FIELDS: Fields = Fields::new(ERROR_CS);
311311
}
312312

313-
fn level_to_cs(level: &Level) -> (&'static dyn Callsite, &'static Fields) {
314-
match *level {
313+
fn level_to_cs(level: Level) -> (&'static dyn Callsite, &'static Fields) {
314+
match level {
315315
Level::TRACE => (TRACE_CS, &*TRACE_FIELDS),
316316
Level::DEBUG => (DEBUG_CS, &*DEBUG_FIELDS),
317317
Level::INFO => (INFO_CS, &*INFO_FIELDS),
@@ -415,13 +415,13 @@ impl<'a> NormalizeEvent<'a> for Event<'a> {
415415
fn normalized_metadata(&'a self) -> Option<Metadata<'a>> {
416416
let original = self.metadata();
417417
if self.is_log() {
418-
let mut fields = LogVisitor::new_for(self, level_to_cs(original.level()).1);
418+
let mut fields = LogVisitor::new_for(self, level_to_cs(*original.level()).1);
419419
self.record(&mut fields);
420420

421421
Some(Metadata::new(
422422
"log event",
423423
fields.target.unwrap_or("log"),
424-
original.level().clone(),
424+
*original.level(),
425425
fields.file,
426426
fields.line.map(|l| l as u32),
427427
fields.module_path,
@@ -434,7 +434,7 @@ impl<'a> NormalizeEvent<'a> for Event<'a> {
434434
}
435435

436436
fn is_log(&self) -> bool {
437-
self.metadata().callsite() == identify_callsite!(level_to_cs(self.metadata().level()).0)
437+
self.metadata().callsite() == identify_callsite!(level_to_cs(*self.metadata().level()).0)
438438
}
439439
}
440440

tracing-log/tests/log_tracer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ impl Subscriber for TestSubscriber {
3939
event.normalized_metadata().map(|normalized| OwnedMetadata {
4040
name: normalized.name().to_string(),
4141
target: normalized.target().to_string(),
42-
level: normalized.level().clone(),
42+
level: *normalized.level(),
4343
module_path: normalized.module_path().map(String::from),
4444
file: normalized.file().map(String::from),
4545
line: normalized.line(),

tracing-subscriber/src/filter/env/directive.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ impl Directive {
8585
Some(StaticDirective {
8686
target: self.target.clone(),
8787
field_names,
88-
level: self.level.clone(),
88+
level: self.level,
8989
})
9090
}
9191

@@ -119,7 +119,7 @@ impl Directive {
119119
.ok()?;
120120
Some(field::CallsiteMatch {
121121
fields,
122-
level: self.level.clone(),
122+
level: self.level,
123123
})
124124
}
125125

@@ -417,9 +417,9 @@ impl<T: Match + Ord> DirectiveSet<T> {
417417
pub(crate) fn add(&mut self, directive: T) {
418418
// does this directive enable a more verbose level than the current
419419
// max? if so, update the max level.
420-
let level = directive.level();
421-
if *level > self.max_level {
422-
self.max_level = level.clone();
420+
let level = *directive.level();
421+
if level > self.max_level {
422+
self.max_level = level;
423423
}
424424
// insert the directive into the vec of directives, ordered by
425425
// specificity (length of target + number of field filters). this
@@ -460,8 +460,8 @@ impl Dynamics {
460460
return Some(f);
461461
}
462462
match base_level {
463-
Some(ref b) if d.level > *b => base_level = Some(d.level.clone()),
464-
None => base_level = Some(d.level.clone()),
463+
Some(ref b) if d.level > *b => base_level = Some(d.level),
464+
None => base_level = Some(d.level),
465465
_ => {}
466466
}
467467
None
@@ -690,7 +690,7 @@ impl CallsiteMatcher {
690690
.collect();
691691
SpanMatcher {
692692
field_matches,
693-
base_level: self.base_level.clone(),
693+
base_level: self.base_level,
694694
}
695695
}
696696
}
@@ -702,7 +702,7 @@ impl SpanMatcher {
702702
.iter()
703703
.filter_map(field::SpanMatch::filter)
704704
.max()
705-
.unwrap_or_else(|| self.base_level.clone())
705+
.unwrap_or(self.base_level)
706706
}
707707

708708
pub(crate) fn record_update(&self, record: &span::Record<'_>) {

tracing-subscriber/src/filter/env/field.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ impl CallsiteMatch {
229229
.collect();
230230
SpanMatch {
231231
fields,
232-
level: self.level.clone(),
232+
level: self.level,
233233
has_matched: AtomicBool::new(false),
234234
}
235235
}
@@ -263,7 +263,7 @@ impl SpanMatch {
263263
#[inline]
264264
pub(crate) fn filter(&self) -> Option<LevelFilter> {
265265
if self.is_matched() {
266-
Some(self.level.clone())
266+
Some(self.level)
267267
} else {
268268
None
269269
}

tracing/src/macros.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2150,7 +2150,7 @@ macro_rules! fieldset {
21502150
#[macro_export]
21512151
macro_rules! level_to_log {
21522152
($level:expr) => {
2153-
match *$level {
2153+
match $level {
21542154
$crate::Level::ERROR => $crate::log::Level::Error,
21552155
$crate::Level::WARN => $crate::log::Level::Warn,
21562156
$crate::Level::INFO => $crate::log::Level::Info,
@@ -2297,7 +2297,7 @@ macro_rules! __tracing_log {
22972297
(target: $target:expr, $level:expr, $($field:tt)+ ) => {
22982298
$crate::if_log_enabled! {{
22992299
use $crate::log;
2300-
let level = $crate::level_to_log!(&$level);
2300+
let level = $crate::level_to_log!($level);
23012301
if level <= log::STATIC_MAX_LEVEL && level <= log::max_level() {
23022302
let log_meta = log::Metadata::builder()
23032303
.level(level)

tracing/src/span.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ impl Span {
552552
} else {
553553
meta.target()
554554
};
555-
span.log(target, level_to_log!(meta.level()), format_args!("++ {}{}", meta.name(), FmtAttrs(attrs)));
555+
span.log(target, level_to_log!(*meta.level()), format_args!("++ {}{}", meta.name(), FmtAttrs(attrs)));
556556
}}
557557

558558
span
@@ -925,7 +925,7 @@ impl Span {
925925
} else {
926926
meta.target()
927927
};
928-
self.log(target, level_to_log!(meta.level()), format_args!("{}{}", meta.name(), FmtValues(&record)));
928+
self.log(target, level_to_log!(*meta.level()), format_args!("{}{}", meta.name(), FmtValues(&record)));
929929
}
930930
}}
931931

@@ -1028,7 +1028,7 @@ impl Span {
10281028
#[inline]
10291029
fn log(&self, target: &str, level: log::Level, message: fmt::Arguments<'_>) {
10301030
if let Some(ref meta) = self.meta {
1031-
if level_to_log!(meta.level()) <= log::max_level() {
1031+
if level_to_log!(*meta.level()) <= log::max_level() {
10321032
let logger = log::logger();
10331033
let log_meta = log::Metadata::builder().level(level).target(target).build();
10341034
if logger.enabled(&log_meta) {

tracing/tests/support/subscriber.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ where
200200
}
201201
}
202202
fn max_level_hint(&self) -> Option<LevelFilter> {
203-
self.max_level.clone()
203+
self.max_level
204204
}
205205

206206
fn record(&self, id: &Id, values: &span::Record<'_>) {

0 commit comments

Comments
 (0)