mirror of
https://github.com/fmtlib/fmt.git
synced 2024-11-21 18:20:04 +00:00
Add width and alignment support to error_code
This commit is contained in:
parent
05226c4bd9
commit
3b70966df5
@ -413,19 +413,37 @@ FMT_END_NAMESPACE
|
|||||||
|
|
||||||
FMT_BEGIN_NAMESPACE
|
FMT_BEGIN_NAMESPACE
|
||||||
FMT_EXPORT
|
FMT_EXPORT
|
||||||
template <typename Char> struct formatter<std::error_code, Char> {
|
template <> struct formatter<std::error_code> {
|
||||||
FMT_CONSTEXPR auto parse(parse_context<Char>& ctx) -> const Char* {
|
private:
|
||||||
return ctx.begin();
|
format_specs specs_;
|
||||||
|
detail::arg_ref<char> width_ref_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
FMT_CONSTEXPR auto parse(parse_context<>& ctx) -> const char* {
|
||||||
|
auto it = ctx.begin(), end = ctx.end();
|
||||||
|
if (it == end) return it;
|
||||||
|
|
||||||
|
it = detail::parse_align(it, end, specs_);
|
||||||
|
if (it == end) return it;
|
||||||
|
|
||||||
|
char c = *it;
|
||||||
|
if ((c >= '0' && c <= '9') || c == '{')
|
||||||
|
it = detail::parse_width(it, end, specs_, width_ref_, ctx);
|
||||||
|
return it;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename FormatContext>
|
template <typename FormatContext>
|
||||||
FMT_CONSTEXPR auto format(const std::error_code& ec, FormatContext& ctx) const
|
FMT_CONSTEXPR20 auto format(const std::error_code& ec, FormatContext& ctx) const
|
||||||
-> decltype(ctx.out()) {
|
-> decltype(ctx.out()) {
|
||||||
auto out = ctx.out();
|
auto specs = specs_;
|
||||||
out = detail::write_bytes<Char>(out, ec.category().name(), format_specs());
|
detail::handle_dynamic_spec(specs.dynamic_width(), specs.width, width_ref_,
|
||||||
out = detail::write<Char>(out, Char(':'));
|
ctx);
|
||||||
out = detail::write<Char>(out, ec.value());
|
memory_buffer buf;
|
||||||
return out;
|
buf.append(string_view(ec.category().name()));
|
||||||
|
buf.push_back(':');
|
||||||
|
detail::write<char>(appender(buf), ec.value());
|
||||||
|
return detail::write<char>(ctx.out(), string_view(buf.data(), buf.size()),
|
||||||
|
specs);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -265,9 +265,13 @@ TEST(std_test, variant) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(std_test, error_code) {
|
TEST(std_test, error_code) {
|
||||||
|
auto& generic = std::generic_category();
|
||||||
EXPECT_EQ("generic:42",
|
EXPECT_EQ("generic:42",
|
||||||
fmt::format(FMT_STRING("{0}"),
|
fmt::format(FMT_STRING("{0}"), std::error_code(42, generic)));
|
||||||
std::error_code(42, std::generic_category())));
|
EXPECT_EQ(" generic:42",
|
||||||
|
fmt::format(FMT_STRING("{:>12}"), std::error_code(42, generic)));
|
||||||
|
EXPECT_EQ("generic:42 ",
|
||||||
|
fmt::format(FMT_STRING("{:12}"), std::error_code(42, generic)));
|
||||||
EXPECT_EQ("system:42",
|
EXPECT_EQ("system:42",
|
||||||
fmt::format(FMT_STRING("{0}"),
|
fmt::format(FMT_STRING("{0}"),
|
||||||
std::error_code(42, fmt::system_category())));
|
std::error_code(42, fmt::system_category())));
|
||||||
|
Loading…
Reference in New Issue
Block a user