1 // Copyright 2023 The Pigweed Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not 4 // use this file except in compliance with the License. You may obtain a copy of 5 // the License at 6 // 7 // https://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 // License for the specific language governing permissions and limitations under 13 // the License. 14 #pragma once 15 16 #include "pw_tokenizer/enum.h" 17 18 /// If nested tokenization is supported by the logging backend, this is a 19 /// format specifier to declare a nested token with a specific domain value. 20 /// 21 /// For non-tokenizing backends, defaults to the string specifier `%s`. 22 #define PW_LOG_ENUM_FMT(enum) PW_LOG_TOKEN_FMT(#enum) 23 24 // pw_log backends that use pw_tokenizer and want to support nested tokenization 25 // define this file under their public_overrides/ directory to activate the 26 // PW_LOG_TOKEN aliases. If this file does not exist in the log backend, 27 // arguments behave as basic strings (const char*). 28 #if __has_include("pw_log_backend/log_backend_uses_pw_tokenizer.h") 29 30 #include "pw_tokenizer/nested_tokenization.h" 31 #include "pw_tokenizer/tokenize.h" 32 33 #define PW_LOG_TOKEN_TYPE pw_tokenizer_Token 34 #define PW_LOG_TOKEN PW_TOKENIZE_STRING 35 #define PW_LOG_TOKEN_EXPR PW_TOKENIZE_STRING_EXPR 36 #define PW_LOG_TOKEN_FMT PW_TOKEN_FMT 37 #define PW_LOG_ENUM(enumerator) ::pw::tokenizer::EnumToToken(enumerator) 38 39 #else 40 41 /// If nested tokenization is supported by the logging backend, this is an 42 /// alias for `pw_tokenizer_Token`. 43 /// 44 /// For non-tokenizing backends, defaults to `const char*`. 45 #define PW_LOG_TOKEN_TYPE const char* 46 47 /// If nested tokenization is supported by the logging backend, this is an 48 /// alias for `PW_TOKENIZE_STRING`. No-op otherwise. 49 #define PW_LOG_TOKEN(string_literal) string_literal 50 51 /// If nested tokenization is supported by the logging backend, this is an 52 /// alias for `PW_TOKENIZE_STRING_EXPR`. No-op otherwise. 53 #define PW_LOG_TOKEN_EXPR(string_literal) string_literal 54 55 /// If nested tokenization is supported by the logging backend, this is an 56 /// alias for `PW_TOKEN_FORMAT`. 57 /// 58 /// For non-tokenizing backends, defaults to the string specifier `%s`. 59 #define PW_LOG_TOKEN_FMT(...) "%s" 60 61 /// If nested tokenization is supported by the logging backend, this will 62 /// return a token representation of the enum. 63 /// 64 /// For non-tokenizing backends, defaults to the string representation of the 65 /// enum. 66 #define PW_LOG_ENUM(enumerator) ::pw::tokenizer::EnumToString(enumerator) 67 68 #endif //__has_include("log_backend/log_backend_uses_pw_tokenizer.h") 69