summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorEd Tanous <ed@tanous.net>2024-03-26 23:19:52 +0300
committerEd Tanous <ed@tanous.net>2024-04-29 22:15:32 +0300
commit95c6307a9b2c02f74b5f5c677d6983f996332ee6 (patch)
tree551ad48ec6f6ca607225b123543459dbd10e76f8 /include
parent3ad903a76521547d2372c56a34c9c2e2c30ec98d (diff)
downloadbmcweb-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')
-rw-r--r--include/boost_formatters.hpp63
-rw-r--r--include/dbus_utility.hpp1
-rw-r--r--include/json_formatters.hpp39
-rw-r--r--include/openbmc_dbus_rest.hpp2
4 files changed, 105 insertions, 0 deletions
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 <boost/system/error_code.hpp>
+#include <boost/url/grammar.hpp>
+#include <boost/url/url_view_base.hpp>
+
+#include <format>
+
+// NOLINTBEGIN(readability-convert-member-functions-to-static, cert-dcl58-cpp)
+template <std::derived_from<boost::system::error_code> ErrorCodeType>
+struct std::formatter<ErrorCodeType>
+{
+ 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 <std::derived_from<boost::urls::grammar::string_view_base> StringView>
+struct std::formatter<StringView>
+{
+ 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 <std::derived_from<boost::urls::url_view_base> UrlBase>
+struct std::formatter<UrlBase>
+{
+ 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 <std::derived_from<boost::core::string_view> StringView>
+struct std::formatter<StringView>
+{
+ 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 <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)
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"