diff options
author | Ed Tanous <ed@tanous.net> | 2024-03-26 23:19:52 +0300 |
---|---|---|
committer | Ed Tanous <ed@tanous.net> | 2024-04-29 22:15:32 +0300 |
commit | 95c6307a9b2c02f74b5f5c677d6983f996332ee6 (patch) | |
tree | 551ad48ec6f6ca607225b123543459dbd10e76f8 /include/json_formatters.hpp | |
parent | 3ad903a76521547d2372c56a34c9c2e2c30ec98d (diff) | |
download | bmcweb-95c6307a9b2c02f74b5f5c677d6983f996332ee6.tar.xz |
Break out formatters
In the change made to move to std::format, we defined some custom type
formatters in logging.hpp. This had the unintended effect of making
all compile units pull in the majority of boost::url, and nlohmann::json
as includes.
This commit breaks out boost and json formatters into their own separate
includes.
Tested: Code compiles. Logging changes only.
Change-Id: I6a788533169f10e19130a1910cd3be0cc729b020
Signed-off-by: Ed Tanous <ed@tanous.net>
Diffstat (limited to 'include/json_formatters.hpp')
-rw-r--r-- | include/json_formatters.hpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/include/json_formatters.hpp b/include/json_formatters.hpp new file mode 100644 index 0000000000..ae72a083c9 --- /dev/null +++ b/include/json_formatters.hpp @@ -0,0 +1,39 @@ +#pragma once + +#include <nlohmann/json.hpp> + +#include <format> + +// Clang-tidy would rather these be static, but using static causes the template +// specialization to not function. Ignore the warning. +// NOLINTBEGIN(readability-convert-member-functions-to-static, cert-dcl58-cpp) + +template <> +struct std::formatter<nlohmann::json::json_pointer> +{ + constexpr auto parse(std::format_parse_context& ctx) + { + return ctx.begin(); + } + auto format(const nlohmann::json::json_pointer& ptr, auto& ctx) const + { + return std::format_to(ctx.out(), "{}", ptr.to_string()); + } +}; + +template <> +struct std::formatter<nlohmann::json> +{ + static constexpr auto parse(std::format_parse_context& ctx) + { + return ctx.begin(); + } + auto format(const nlohmann::json& json, auto& ctx) const + { + return std::format_to( + ctx.out(), "{}", + json.dump(-1, ' ', false, + nlohmann::json::error_handler_t::replace)); + } +}; +// NOLINTEND(readability-convert-member-functions-to-static, cert-dcl58-cpp) |