diff --git a/src/kv/error.rs b/src/kv/error.rs index 120d74919..baf103a22 100644 --- a/src/kv/error.rs +++ b/src/kv/error.rs @@ -52,7 +52,7 @@ mod std_support { use super::*; use std::{error, io}; - pub(super) type BoxedError = Box; + pub(super) type BoxedError = Box; impl Error { /// Create an error from a standard error type. diff --git a/src/kv/source.rs b/src/kv/source.rs index 914f3bdac..a882068f9 100644 --- a/src/kv/source.rs +++ b/src/kv/source.rs @@ -19,7 +19,7 @@ pub trait Source { /// /// A source should yield the same key-value pairs to a subsequent visitor unless /// that visitor itself fails. - fn visit<'kvs>(&'kvs self, visitor: &mut Visitor<'kvs>) -> Result<(), Error>; + fn visit<'kvs>(&'kvs self, visitor: &mut dyn Visitor<'kvs>) -> Result<(), Error>; /// Get the value for a given key. /// @@ -82,7 +82,7 @@ impl<'a, T> Source for &'a T where T: Source + ?Sized, { - fn visit<'kvs>(&'kvs self, visitor: &mut Visitor<'kvs>) -> Result<(), Error> { + fn visit<'kvs>(&'kvs self, visitor: &mut dyn Visitor<'kvs>) -> Result<(), Error> { Source::visit(&**self, visitor) } @@ -100,7 +100,7 @@ where K: ToKey, V: ToValue, { - fn visit<'kvs>(&'kvs self, visitor: &mut Visitor<'kvs>) -> Result<(), Error> { + fn visit<'kvs>(&'kvs self, visitor: &mut dyn Visitor<'kvs>) -> Result<(), Error> { visitor.visit_pair(self.0.to_key(), self.1.to_value()) } @@ -121,7 +121,7 @@ impl Source for [S] where S: Source, { - fn visit<'kvs>(&'kvs self, visitor: &mut Visitor<'kvs>) -> Result<(), Error> { + fn visit<'kvs>(&'kvs self, visitor: &mut dyn Visitor<'kvs>) -> Result<(), Error> { for source in self { source.visit(visitor)?; } @@ -138,7 +138,7 @@ impl Source for Option where S: Source, { - fn visit<'kvs>(&'kvs self, visitor: &mut Visitor<'kvs>) -> Result<(), Error> { + fn visit<'kvs>(&'kvs self, visitor: &mut dyn Visitor<'kvs>) -> Result<(), Error> { if let Some(ref source) = *self { source.visit(visitor)?; } @@ -206,7 +206,7 @@ mod std_support { where S: Source + ?Sized, { - fn visit<'kvs>(&'kvs self, visitor: &mut Visitor<'kvs>) -> Result<(), Error> { + fn visit<'kvs>(&'kvs self, visitor: &mut dyn Visitor<'kvs>) -> Result<(), Error> { Source::visit(&**self, visitor) } @@ -223,7 +223,7 @@ mod std_support { where S: Source, { - fn visit<'kvs>(&'kvs self, visitor: &mut Visitor<'kvs>) -> Result<(), Error> { + fn visit<'kvs>(&'kvs self, visitor: &mut dyn Visitor<'kvs>) -> Result<(), Error> { Source::visit(&**self, visitor) } @@ -251,7 +251,7 @@ mod std_support { V: ToValue, S: BuildHasher, { - fn visit<'kvs>(&'kvs self, visitor: &mut Visitor<'kvs>) -> Result<(), Error> { + fn visit<'kvs>(&'kvs self, visitor: &mut dyn Visitor<'kvs>) -> Result<(), Error> { for (key, value) in self { visitor.visit_pair(key.to_key(), value.to_value())?; } @@ -272,7 +272,7 @@ mod std_support { K: ToKey + Borrow + Ord, V: ToValue, { - fn visit<'kvs>(&'kvs self, visitor: &mut Visitor<'kvs>) -> Result<(), Error> { + fn visit<'kvs>(&'kvs self, visitor: &mut dyn Visitor<'kvs>) -> Result<(), Error> { for (key, value) in self { visitor.visit_pair(key.to_key(), value.to_value())?; } @@ -347,12 +347,12 @@ mod tests { #[test] fn source_is_object_safe() { - fn _check(_: &Source) {} + fn _check(_: &dyn Source) {} } #[test] fn visitor_is_object_safe() { - fn _check(_: &Visitor) {} + fn _check(_: &dyn Visitor) {} } #[test] @@ -363,7 +363,7 @@ mod tests { } impl Source for OnePair { - fn visit<'kvs>(&'kvs self, visitor: &mut Visitor<'kvs>) -> Result<(), Error> { + fn visit<'kvs>(&'kvs self, visitor: &mut dyn Visitor<'kvs>) -> Result<(), Error> { visitor.visit_pair(self.key.to_key(), self.value.to_value()) } } diff --git a/src/kv/value/internal.rs b/src/kv/value/internal.rs index c437ab73e..f2c22a510 100644 --- a/src/kv/value/internal.rs +++ b/src/kv/value/internal.rs @@ -12,19 +12,19 @@ pub(super) enum Inner<'v> { /// A simple primitive value that can be copied without allocating. Primitive(Primitive<'v>), /// A value that can be filled. - Fill(&'v Fill), + Fill(&'v dyn Fill), /// A debuggable value. - Debug(&'v fmt::Debug), + Debug(&'v dyn fmt::Debug), /// A displayable value. - Display(&'v fmt::Display), + Display(&'v dyn fmt::Display), #[cfg(feature = "kv_unstable_sval")] /// A structured value from `sval`. - Sval(&'v sval_support::Value), + Sval(&'v dyn sval_support::Value), } impl<'v> Inner<'v> { - pub(super) fn visit(&self, visitor: &mut Visitor) -> Result<(), Error> { + pub(super) fn visit(&self, visitor: &mut dyn Visitor) -> Result<(), Error> { match *self { Inner::Primitive(value) => match value { Primitive::Signed(value) => visitor.i64(value), @@ -47,8 +47,8 @@ impl<'v> Inner<'v> { /// The internal serialization contract. pub(super) trait Visitor { - fn debug(&mut self, v: &fmt::Debug) -> Result<(), Error>; - fn display(&mut self, v: &fmt::Display) -> Result<(), Error> { + fn debug(&mut self, v: &dyn fmt::Debug) -> Result<(), Error>; + fn display(&mut self, v: &dyn fmt::Display) -> Result<(), Error> { self.debug(&format_args!("{}", v)) } @@ -61,7 +61,7 @@ pub(super) trait Visitor { fn none(&mut self) -> Result<(), Error>; #[cfg(feature = "kv_unstable_sval")] - fn sval(&mut self, v: &sval_support::Value) -> Result<(), Error>; + fn sval(&mut self, v: &dyn sval_support::Value) -> Result<(), Error>; } #[derive(Clone, Copy)] @@ -119,7 +119,7 @@ mod fmt_support { struct FmtVisitor<'a, 'b: 'a>(&'a mut fmt::Formatter<'b>); impl<'a, 'b: 'a> Visitor for FmtVisitor<'a, 'b> { - fn debug(&mut self, v: &fmt::Debug) -> Result<(), Error> { + fn debug(&mut self, v: &dyn fmt::Debug) -> Result<(), Error> { v.fmt(self.0)?; Ok(()) @@ -154,7 +154,7 @@ mod fmt_support { } #[cfg(feature = "kv_unstable_sval")] - fn sval(&mut self, v: &sval_support::Value) -> Result<(), Error> { + fn sval(&mut self, v: &dyn sval_support::Value) -> Result<(), Error> { sval_support::fmt(self.0, v) } } @@ -188,7 +188,7 @@ pub(super) mod sval_support { pub(in kv::value) use self::sval::Value; - pub(super) fn fmt(f: &mut fmt::Formatter, v: &sval::Value) -> Result<(), Error> { + pub(super) fn fmt(f: &mut fmt::Formatter, v: &dyn sval::Value) -> Result<(), Error> { sval::fmt::debug(f, v)?; Ok(()) } @@ -206,7 +206,7 @@ pub(super) mod sval_support { struct SvalVisitor<'a, 'b: 'a>(&'a mut sval::value::Stream<'b>); impl<'a, 'b: 'a> Visitor for SvalVisitor<'a, 'b> { - fn debug(&mut self, v: &fmt::Debug) -> Result<(), Error> { + fn debug(&mut self, v: &dyn fmt::Debug) -> Result<(), Error> { self.0 .fmt(format_args!("{:?}", v)) .map_err(Error::from_sval) @@ -240,7 +240,7 @@ pub(super) mod sval_support { self.0.none().map_err(Error::from_sval) } - fn sval(&mut self, v: &sval::Value) -> Result<(), Error> { + fn sval(&mut self, v: &dyn sval::Value) -> Result<(), Error> { self.0.any(v).map_err(Error::from_sval) } } diff --git a/src/kv/value/mod.rs b/src/kv/value/mod.rs index 5872cc57c..332170d33 100644 --- a/src/kv/value/mod.rs +++ b/src/kv/value/mod.rs @@ -55,7 +55,7 @@ where /// A value slot to fill using the [`Fill`](trait.Fill.html) trait. pub struct Slot<'a> { filled: bool, - visitor: &'a mut Visitor, + visitor: &'a mut dyn Visitor, } impl<'a> fmt::Debug for Slot<'a> { @@ -65,7 +65,7 @@ impl<'a> fmt::Debug for Slot<'a> { } impl<'a> Slot<'a> { - fn new(visitor: &'a mut Visitor) -> Self { + fn new(visitor: &'a mut dyn Visitor) -> Self { Slot { visitor, filled: false, @@ -110,7 +110,7 @@ impl<'v> Value<'v> { } } - fn visit(&self, visitor: &mut Visitor) -> Result<(), Error> { + fn visit(&self, visitor: &mut dyn Visitor) -> Result<(), Error> { self.inner.visit(visitor) } } @@ -125,7 +125,7 @@ mod tests { impl Fill for TestFill { fn fill(&self, slot: &mut Slot) -> Result<(), Error> { - let dbg: &fmt::Debug = &1; + let dbg: &dyn fmt::Debug = &1; slot.fill(Value::from_debug(&dbg)) } diff --git a/src/kv/value/test.rs b/src/kv/value/test.rs index 61f2d3ac8..f57715b9d 100644 --- a/src/kv/value/test.rs +++ b/src/kv/value/test.rs @@ -26,7 +26,7 @@ impl<'v> Value<'v> { struct TestVisitor(Option); impl internal::Visitor for TestVisitor { - fn debug(&mut self, v: &fmt::Debug) -> Result<(), Error> { + fn debug(&mut self, v: &dyn fmt::Debug) -> Result<(), Error> { self.0 = Some(Token::Str(format!("{:?}", v))); Ok(()) } @@ -67,7 +67,7 @@ impl<'v> Value<'v> { } #[cfg(feature = "kv_unstable_sval")] - fn sval(&mut self, _: &internal::sval_support::Value) -> Result<(), Error> { + fn sval(&mut self, _: &dyn internal::sval_support::Value) -> Result<(), Error> { self.0 = Some(Token::Sval); Ok(()) } diff --git a/src/lib.rs b/src/lib.rs index c8f9377ae..dedfb1b9f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -305,7 +305,7 @@ pub mod kv; // The LOGGER static holds a pointer to the global logger. It is protected by // the STATE static which determines whether LOGGER has been initialized yet. -static mut LOGGER: &'static Log = &NopLogger; +static mut LOGGER: &dyn Log = &NopLogger; #[allow(deprecated)] static STATE: AtomicUsize = ATOMIC_USIZE_INIT; @@ -320,11 +320,11 @@ const INITIALIZED: usize = 2; #[allow(deprecated)] static MAX_LOG_LEVEL_FILTER: AtomicUsize = ATOMIC_USIZE_INIT; -static LOG_LEVEL_NAMES: [&'static str; 6] = ["OFF", "ERROR", "WARN", "INFO", "DEBUG", "TRACE"]; +static LOG_LEVEL_NAMES: [&str; 6] = ["OFF", "ERROR", "WARN", "INFO", "DEBUG", "TRACE"]; -static SET_LOGGER_ERROR: &'static str = "attempted to set a logger after the logging system \ - was already initialized"; -static LEVEL_PARSE_ERROR: &'static str = +static SET_LOGGER_ERROR: &str = "attempted to set a logger after the logging system \ + was already initialized"; +static LEVEL_PARSE_ERROR: &str = "attempted to convert a string that doesn't match an existing log level"; /// An enum representing the available verbosity levels of the logger. @@ -746,7 +746,7 @@ pub struct Record<'a> { // the underlying `Source`. #[cfg(feature = "kv_unstable")] #[derive(Clone)] -struct KeyValues<'a>(&'a kv::Source); +struct KeyValues<'a>(&'a dyn kv::Source); #[cfg(feature = "kv_unstable")] impl<'a> fmt::Debug for KeyValues<'a> { @@ -827,7 +827,7 @@ impl<'a> Record<'a> { /// The structued key-value pairs associated with the message. #[cfg(feature = "kv_unstable")] #[inline] - pub fn key_values(&self) -> &kv::Source { + pub fn key_values(&self) -> &dyn kv::Source { self.key_values.0 } @@ -990,7 +990,7 @@ impl<'a> RecordBuilder<'a> { /// Set [`key_values`](struct.Record.html#method.key_values) #[cfg(feature = "kv_unstable")] #[inline] - pub fn key_values(&mut self, kvs: &'a kv::Source) -> &mut RecordBuilder<'a> { + pub fn key_values(&mut self, kvs: &'a dyn kv::Source) -> &mut RecordBuilder<'a> { self.record.key_values = KeyValues(kvs); self } @@ -1198,8 +1198,8 @@ pub fn max_level() -> LevelFilter { /// /// [`set_logger`]: fn.set_logger.html #[cfg(all(feature = "std", atomic_cas))] -pub fn set_boxed_logger(logger: Box) -> Result<(), SetLoggerError> { - set_logger_inner(|| unsafe { &*Box::into_raw(logger) }) +pub fn set_boxed_logger(logger: Box) -> Result<(), SetLoggerError> { + set_logger_inner(|| Box::leak(logger)) } /// Sets the global logger to a `&'static Log`. @@ -1256,14 +1256,14 @@ pub fn set_boxed_logger(logger: Box) -> Result<(), SetLoggerError> { /// /// [`set_logger_racy`]: fn.set_logger_racy.html #[cfg(atomic_cas)] -pub fn set_logger(logger: &'static Log) -> Result<(), SetLoggerError> { +pub fn set_logger(logger: &'static dyn Log) -> Result<(), SetLoggerError> { set_logger_inner(|| logger) } #[cfg(atomic_cas)] fn set_logger_inner(make_logger: F) -> Result<(), SetLoggerError> where - F: FnOnce() -> &'static Log, + F: FnOnce() -> &'static dyn Log, { unsafe { match STATE.compare_and_swap(UNINITIALIZED, INITIALIZING, Ordering::SeqCst) { @@ -1300,7 +1300,7 @@ where /// (including all logging macros). /// /// [`set_logger`]: fn.set_logger.html -pub unsafe fn set_logger_racy(logger: &'static Log) -> Result<(), SetLoggerError> { +pub unsafe fn set_logger_racy(logger: &'static dyn Log) -> Result<(), SetLoggerError> { match STATE.load(Ordering::SeqCst) { UNINITIALIZED => { LOGGER = logger; @@ -1360,7 +1360,7 @@ impl error::Error for ParseLevelError { /// Returns a reference to the logger. /// /// If a logger has not been set, a no-op implementation is returned. -pub fn logger() -> &'static Log { +pub fn logger() -> &'static dyn Log { unsafe { if STATE.load(Ordering::SeqCst) != INITIALIZED { static NOP: NopLogger = NopLogger; @@ -1405,7 +1405,7 @@ pub fn __private_api_log( args: fmt::Arguments<'_>, level: Level, &(target, module_path, file, line): &(&str, &'static str, &'static str, u32), - kvs: Option<&[(&str, &kv::ToValue)]>, + kvs: Option<&[(&str, &dyn kv::ToValue)]>, ) { logger().log( &Record::builder() diff --git a/test_max_level_features/main.rs b/test_max_level_features/main.rs index ba5ce1138..bfbf2b247 100644 --- a/test_max_level_features/main.rs +++ b/test_max_level_features/main.rs @@ -8,9 +8,7 @@ use log::{Level, LevelFilter, Log, Record, Metadata}; use log::set_boxed_logger; #[cfg(not(feature = "std"))] fn set_boxed_logger(logger: Box) -> Result<(), log::SetLoggerError> { - unsafe { - log::set_logger(&*Box::into_raw(logger)) - } + log::set_logger(Box::leak(logger)) } struct State { diff --git a/tests/filters.rs b/tests/filters.rs index e4d21a87f..3c261c469 100644 --- a/tests/filters.rs +++ b/tests/filters.rs @@ -8,8 +8,8 @@ use std::sync::{Arc, Mutex}; use log::set_boxed_logger; #[cfg(not(feature = "std"))] -fn set_boxed_logger(logger: Box) -> Result<(), log::SetLoggerError> { - log::set_logger(unsafe { &*Box::into_raw(logger) }) +fn set_boxed_logger(logger: Box) -> Result<(), log::SetLoggerError> { + log::set_logger(Box::leak(logger)) } struct State {