diff options
-rw-r--r-- | http/complete_response_fields.hpp | 1 | ||||
-rw-r--r-- | http/logging.hpp | 91 | ||||
-rw-r--r-- | include/boost_formatters.hpp | 63 | ||||
-rw-r--r-- | include/dbus_utility.hpp | 1 | ||||
-rw-r--r-- | include/json_formatters.hpp | 39 | ||||
-rw-r--r-- | include/openbmc_dbus_rest.hpp | 2 | ||||
-rw-r--r-- | redfish-core/include/utils/query_param.hpp | 1 | ||||
-rw-r--r-- | redfish-core/src/utils/dbus_utils.cpp | 1 | ||||
-rw-r--r-- | test/http/server_sent_event_test.cpp | 1 |
9 files changed, 109 insertions, 91 deletions
diff --git a/http/complete_response_fields.hpp b/http/complete_response_fields.hpp index 1ac75ad8c2..bec33fc804 100644 --- a/http/complete_response_fields.hpp +++ b/http/complete_response_fields.hpp @@ -1,6 +1,7 @@ #pragma once #include "authentication.hpp" +#include "boost_formatters.hpp" #include "http_request.hpp" #include "http_response.hpp" #include "http_utility.hpp" diff --git a/http/logging.hpp b/http/logging.hpp index de14d99e8f..9b1a36b143 100644 --- a/http/logging.hpp +++ b/http/logging.hpp @@ -2,12 +2,6 @@ #include "bmcweb_config.h" -#include <boost/system/error_code.hpp> -#include <boost/url/pct_string_view.hpp> -#include <boost/url/string_view.hpp> -#include <boost/url/url_view_base.hpp> -#include <nlohmann/json.hpp> - #include <bit> #include <format> #include <iostream> @@ -15,64 +9,8 @@ #include <string_view> #include <system_error> -// 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<boost::system::error_code> -{ - constexpr auto parse(std::format_parse_context& ctx) - { - return ctx.begin(); - } - - auto format(const boost::system::error_code& ec, auto& ctx) const - { - return std::format_to(ctx.out(), "{}", ec.what()); - } -}; - -template <> -struct std::formatter<boost::urls::pct_string_view> -{ - constexpr auto parse(std::format_parse_context& ctx) - { - return ctx.begin(); - } - auto format(const boost::urls::pct_string_view& 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> URL> -struct std::formatter<URL> -{ - constexpr auto parse(std::format_parse_context& ctx) - { - return ctx.begin(); - } - auto format(const URL& msg, auto& ctx) const - { - return std::format_to(ctx.out(), "{}", std::string_view(msg.buffer())); - } -}; - -template <> -struct std::formatter<boost::core::string_view> -{ - constexpr auto parse(std::format_parse_context& ctx) - { - return ctx.begin(); - } - auto format(const boost::core::string_view& msg, auto& ctx) const - { - return std::format_to(ctx.out(), "{}", std::string_view(msg)); - } -}; - -template <> struct std::formatter<void*> { constexpr auto parse(std::format_parse_context& ctx) @@ -85,35 +23,6 @@ struct std::formatter<void*> std::to_string(std::bit_cast<size_t>(ptr))); } }; - -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) namespace crow 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" diff --git a/redfish-core/include/utils/query_param.hpp b/redfish-core/include/utils/query_param.hpp index 0f987632d2..2441c9f3c0 100644 --- a/redfish-core/include/utils/query_param.hpp +++ b/redfish-core/include/utils/query_param.hpp @@ -6,6 +6,7 @@ #include "error_messages.hpp" #include "http_request.hpp" #include "http_response.hpp" +#include "json_formatters.hpp" #include "logging.hpp" #include "str_utility.hpp" diff --git a/redfish-core/src/utils/dbus_utils.cpp b/redfish-core/src/utils/dbus_utils.cpp index bd114a3d74..f30e6ed46a 100644 --- a/redfish-core/src/utils/dbus_utils.cpp +++ b/redfish-core/src/utils/dbus_utils.cpp @@ -1,6 +1,7 @@ #include "utils/dbus_utils.hpp" #include "async_resp.hpp" +#include "boost_formatters.hpp" #include "error_messages.hpp" #include "logging.hpp" diff --git a/test/http/server_sent_event_test.cpp b/test/http/server_sent_event_test.cpp index bf39ee8e81..43b830d92b 100644 --- a/test/http/server_sent_event_test.cpp +++ b/test/http/server_sent_event_test.cpp @@ -1,3 +1,4 @@ +#include "boost_formatters.hpp" #include "http/server_sent_event.hpp" #include <boost/asio/buffer.hpp> |