From 95c6307a9b2c02f74b5f5c677d6983f996332ee6 Mon Sep 17 00:00:00 2001 From: Ed Tanous Date: Tue, 26 Mar 2024 13:19:52 -0700 Subject: 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 --- include/boost_formatters.hpp | 63 +++++++++++++++++++++++++++++++++++++++++++ include/dbus_utility.hpp | 1 + include/json_formatters.hpp | 39 +++++++++++++++++++++++++++ include/openbmc_dbus_rest.hpp | 2 ++ 4 files changed, 105 insertions(+) create mode 100644 include/boost_formatters.hpp create mode 100644 include/json_formatters.hpp (limited to 'include') diff --git a/include/boost_formatters.hpp b/include/boost_formatters.hpp new file mode 100644 index 0000000000..0503d59d79 --- /dev/null +++ b/include/boost_formatters.hpp @@ -0,0 +1,63 @@ +#pragma once + +#include +#include +#include + +#include + +// NOLINTBEGIN(readability-convert-member-functions-to-static, cert-dcl58-cpp) +template ErrorCodeType> +struct std::formatter +{ + constexpr auto parse(std::format_parse_context& ctx) + { + return ctx.begin(); + } + + auto format(const ErrorCodeType& ec, auto& ctx) const + { + return std::format_to(ctx.out(), "{}", ec.what()); + } +}; + +template StringView> +struct std::formatter +{ + constexpr auto parse(std::format_parse_context& ctx) + { + return ctx.begin(); + } + auto format(const StringView& msg, auto& ctx) const + { + return std::format_to(ctx.out(), "{}", + std::string_view(msg.data(), msg.size())); + } +}; + +template UrlBase> +struct std::formatter +{ + constexpr auto parse(std::format_parse_context& ctx) + { + return ctx.begin(); + } + auto format(const UrlBase& msg, auto& ctx) const + { + return std::format_to(ctx.out(), "{}", std::string_view(msg.buffer())); + } +}; + +template StringView> +struct std::formatter +{ + constexpr auto parse(std::format_parse_context& ctx) + { + return ctx.begin(); + } + auto format(const StringView& msg, auto& ctx) const + { + return std::format_to(ctx.out(), "{}", std::string_view(msg)); + } +}; +// NOLINTEND(readability-convert-member-functions-to-static, cert-dcl58-cpp) diff --git a/include/dbus_utility.hpp b/include/dbus_utility.hpp index c06ba9eae6..0cd3b7eab3 100644 --- a/include/dbus_utility.hpp +++ b/include/dbus_utility.hpp @@ -15,6 +15,7 @@ */ #pragma once +#include "boost_formatters.hpp" #include "dbus_singleton.hpp" #include "logging.hpp" 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 + +#include + +// 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 +{ + 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 +{ + 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) diff --git a/include/openbmc_dbus_rest.hpp b/include/openbmc_dbus_rest.hpp index 17b5931199..f0b72fbcc4 100644 --- a/include/openbmc_dbus_rest.hpp +++ b/include/openbmc_dbus_rest.hpp @@ -15,10 +15,12 @@ #pragma once #include "app.hpp" #include "async_resp.hpp" +#include "boost_formatters.hpp" #include "dbus_singleton.hpp" #include "dbus_utility.hpp" #include "http_request.hpp" #include "http_response.hpp" +#include "json_formatters.hpp" #include "logging.hpp" #include "parsing.hpp" #include "routing.hpp" -- cgit v1.2.3