From c7439f781b4ec50855130dcc683c54a56060bb24 Mon Sep 17 00:00:00 2001 From: Alfi Maulana Date: Mon, 3 Jul 2023 20:33:11 +0700 Subject: [PATCH 1/2] feat(error): add formatter for `Error` struct --- error/include/error/error.hpp | 7 +++++++ error/src/error.cpp | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/error/include/error/error.hpp b/error/include/error/error.hpp index 4c7786b..2be232b 100644 --- a/error/include/error/error.hpp +++ b/error/include/error/error.hpp @@ -77,3 +77,10 @@ bool operator==(const Error& lhs, const Error& rhs); bool operator!=(const Error& lhs, const Error& rhs); } // namespace error + +template <> +struct fmt::formatter { + format_parse_context::iterator parse(format_parse_context& ctx) const; + format_context::iterator format(const error::Error& err, + format_context& ctx) const; +}; diff --git a/error/src/error.cpp b/error/src/error.cpp index d064f8e..c3b119b 100644 --- a/error/src/error.cpp +++ b/error/src/error.cpp @@ -19,3 +19,17 @@ bool operator!=(const Error& lhs, const Error& rhs) { } } // namespace error + +namespace fmt { + +format_parse_context::iterator formatter::parse( + format_parse_context& ctx) const { + return ctx.begin(); +} + +format_context::iterator formatter::format( + const error::Error& err, format_context& ctx) const { + return format_to(ctx.out(), "error: {}", err.what()); +} + +} // namespace fmt From 860d488ce55842bfa6b69596f30fd4889af6b5d1 Mon Sep 17 00:00:00 2001 From: Alfi Maulana Date: Mon, 3 Jul 2023 20:34:15 +0700 Subject: [PATCH 2/2] test(error): separate test error printing by using ostream and fmtlib --- error/test/error_test.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/error/test/error_test.cpp b/error/test/error_test.cpp index 3663439..c4fc7a0 100644 --- a/error/test/error_test.cpp +++ b/error/test/error_test.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -47,6 +49,13 @@ TEST_CASE("Error Comparison") { TEST_CASE("Error Printing") { const error::Error err("unknown error"); - const auto ss = std::stringstream() << err; - REQUIRE(ss.str() == "error: unknown error"); + + SECTION("Using ostream") { + const auto ss = std::stringstream() << err; + REQUIRE(ss.str() == "error: unknown error"); + } + + SECTION("Using fmtlib") { + REQUIRE(fmt::format("{}", err) == "error: unknown error"); + } }