refactor: ostream/format support for fragment_category

This commit is contained in:
Marcus Holland-Moritz 2023-11-21 10:32:11 +01:00
parent d938191248
commit 4ad155e19f

View File

@ -24,9 +24,12 @@
#include <cassert>
#include <cstdint>
#include <limits>
#include <ostream>
#include <folly/hash/Hash.h>
#include <fmt/format.h>
namespace dwarfs {
class fragment_category {
@ -101,8 +104,41 @@ class fragment_category {
value_type subcategory_{uninitialized};
};
inline std::ostream&
operator<<(std::ostream& os, fragment_category const& cat) {
if (cat) {
os << cat.value();
if (cat.has_subcategory()) {
os << '.' << cat.subcategory();
}
} else {
os << "uninitialized";
}
return os;
}
} // namespace dwarfs
template <>
struct fmt::formatter<dwarfs::fragment_category> : formatter<std::string> {
template <typename FormatContext>
auto format(dwarfs::fragment_category const& cat, FormatContext& ctx) {
if (cat) {
if (cat.has_subcategory()) {
return formatter<std::string>::format(
fmt::format("{}.{}", cat.value(), cat.subcategory()), ctx);
} else {
return formatter<std::string>::format(fmt::format("{}", cat.value()),
ctx);
}
} else {
return formatter<std::string>::format("uninitialized", ctx);
}
}
};
namespace std {
template <>