From c626f82520f5da993e2eddbf2b59615df9f03ce6 Mon Sep 17 00:00:00 2001 From: Thomas de Zeeuw Date: Fri, 25 Feb 2022 11:39:53 +0100 Subject: [PATCH] Support static string as key value --- src/macros.rs | 13 +++++++++---- tests/macros.rs | 10 ++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/macros.rs b/src/macros.rs index d1177c99a..ec2f4200c 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -30,14 +30,14 @@ #[macro_export(local_inner_macros)] macro_rules! log { // log!(target: "my_target", Level::Info; key1 = 42, key2 = true; "a {} event", "log"); - (target: $target:expr, $lvl:expr, $($key:ident = $value:expr),+; $($arg:tt)+) => ({ + (target: $target:expr, $lvl:expr, $($key:tt = $value:expr),+; $($arg:tt)+) => ({ let lvl = $lvl; if lvl <= $crate::STATIC_MAX_LEVEL && lvl <= $crate::max_level() { $crate::__private_api_log( __log_format_args!($($arg)+), lvl, &($target, __log_module_path!(), __log_file!(), __log_line!()), - Some(&[$((__log_stringify!($key), &$value)),+]) + Some(&[$((__log_key!($key), &$value)),+]) ); } }); @@ -268,8 +268,13 @@ macro_rules! __log_line { #[doc(hidden)] #[macro_export] -macro_rules! __log_stringify { - ($($args:tt)*) => { +macro_rules! __log_key { + // key1 = 42 + ($($args:ident)*) => { stringify!($($args)*) }; + // "key1" = 42 + ($($args:expr)*) => { + $($args)* + }; } diff --git a/tests/macros.rs b/tests/macros.rs index 4bb73da52..7b2483ceb 100644 --- a/tests/macros.rs +++ b/tests/macros.rs @@ -205,3 +205,13 @@ fn kv_implicit_named_args() { all_log_macros!(cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {world}"); } } + +#[test] +#[cfg(feature = "kv_unstable")] +fn kv_string_keys() { + for lvl in log::Level::iter() { + log!(target: "my_target", lvl, "also dogs" = "Fílos", "key/that-can't/be/an/ident" = "hi"; "hello {world}", world = "world"); + } + + all_log_macros!(target: "my_target", "also dogs" = "Fílos", "key/that-can't/be/an/ident" = "hi"; "hello {world}", world = "world"); +}