Add format_as support for std::variant and std::expected formatters (#4575)
Signed-off-by: Vladislav Shchapov <vladislav@shchapov.ru>
This commit is contained in:
committed by
GitHub
parent
378a5ab3c1
commit
85f6ecc7a0
@@ -197,7 +197,33 @@ class my_class {
|
||||
return fmt::to_string(elm.av);
|
||||
}
|
||||
};
|
||||
|
||||
class my_class_int {
|
||||
public:
|
||||
int av;
|
||||
|
||||
private:
|
||||
friend auto format_as(const my_class_int& elm) -> int { return elm.av; }
|
||||
};
|
||||
} // namespace my_nso
|
||||
|
||||
TEST(std_test, expected_format_as) {
|
||||
#ifdef __cpp_lib_expected
|
||||
EXPECT_EQ(
|
||||
fmt::format(
|
||||
"{}", std::expected<my_nso::my_number, int>{my_nso::my_number::one}),
|
||||
"expected(\"first\")");
|
||||
EXPECT_EQ(
|
||||
fmt::format("{}",
|
||||
std::expected<my_nso::my_class, int>{my_nso::my_class{7}}),
|
||||
"expected(\"7\")");
|
||||
EXPECT_EQ(fmt::format("{}",
|
||||
std::expected<my_nso::my_class_int, int>{
|
||||
my_nso::my_class_int{8}}),
|
||||
"expected(8)");
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST(std_test, optional_format_as) {
|
||||
#ifdef __cpp_lib_optional
|
||||
EXPECT_EQ(fmt::format("{}", std::optional<my_nso::my_number>{}), "none");
|
||||
@@ -206,6 +232,8 @@ TEST(std_test, optional_format_as) {
|
||||
EXPECT_EQ(fmt::format("{}", std::optional<my_nso::my_class>{}), "none");
|
||||
EXPECT_EQ(fmt::format("{}", std::optional{my_nso::my_class{7}}),
|
||||
"optional(\"7\")");
|
||||
EXPECT_EQ(fmt::format("{}", std::optional{my_nso::my_class_int{8}}),
|
||||
"optional(8)");
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -275,6 +303,24 @@ TEST(std_test, variant) {
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST(std_test, variant_format_as) {
|
||||
#ifdef __cpp_lib_variant
|
||||
|
||||
EXPECT_EQ(fmt::format("{}", std::variant<my_nso::my_number>{}),
|
||||
"variant(\"first\")");
|
||||
EXPECT_EQ(fmt::format(
|
||||
"{}", std::variant<my_nso::my_number>{my_nso::my_number::one}),
|
||||
"variant(\"first\")");
|
||||
EXPECT_EQ(
|
||||
fmt::format("{}", std::variant<my_nso::my_class>{my_nso::my_class{7}}),
|
||||
"variant(\"7\")");
|
||||
EXPECT_EQ(
|
||||
fmt::format("{}",
|
||||
std::variant<my_nso::my_class_int>{my_nso::my_class_int{8}}),
|
||||
"variant(8)");
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST(std_test, error_code) {
|
||||
auto& generic = std::generic_category();
|
||||
EXPECT_EQ(fmt::format("{}", std::error_code(42, generic)), "generic:42");
|
||||
|
||||
Reference in New Issue
Block a user