diff options
author | 2022-04-03 21:38:57 -0400 | |
---|---|---|
committer | 2022-04-03 21:38:57 -0400 | |
commit | 945cb29e749cc3789e14ee8194f6227feffa25f9 (patch) | |
tree | c429c219d07f41211b38d4e5ba33beb9288d8998 /src/lib/formats/fsmeta.cpp | |
parent | 07a357463b7ba57dc45226a7596a7113849c0a3d (diff) |
Changed fs::meta_value::to_string() to not be static and not require meta_type (#9510)
No need to pass in the meta_type when using std::visit() on the std::variant
Diffstat (limited to 'src/lib/formats/fsmeta.cpp')
-rw-r--r-- | src/lib/formats/fsmeta.cpp | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/src/lib/formats/fsmeta.cpp b/src/lib/formats/fsmeta.cpp index 9ccb7e144b3..9c7143301ce 100644 --- a/src/lib/formats/fsmeta.cpp +++ b/src/lib/formats/fsmeta.cpp @@ -32,20 +32,34 @@ const char *meta_data::entry_name(meta_name name) return ""; } -std::string meta_value::to_string(meta_type type, const meta_value &m) +std::string meta_value::to_string() const { - switch(type) { - case meta_type::string: return m.as_string(); - case meta_type::number: return util::string_format("0x%x", m.as_number()); - case meta_type::flag: return m.as_flag() ? "t" : "f"; - case meta_type::date: { - auto dt = m.as_date(); - return util::string_format("%04d-%02d-%02d %02d:%02d:%02d", - dt.year, dt.month, dt.day_of_month, - dt.hour, dt.minute, dt.second); - } - } - return std::string(""); + std::string result; + + std::visit([this, &result](auto &&arg) + { + using T = std::decay_t<decltype(arg)>; + if constexpr (std::is_same_v<T, std::string>) + { + result = as_string(); + } + else if constexpr (std::is_same_v<T, uint64_t>) + { + result = util::string_format("0x%x", as_number()); + } + else if constexpr (std::is_same_v<T, bool>) + { + result = as_flag() ? "t" : "f"; + } + else if constexpr (std::is_same_v<T, util::arbitrary_datetime>) + { + auto dt = as_date(); + result = util::string_format("%04d-%02d-%02d %02d:%02d:%02d", + dt.year, dt.month, dt.day_of_month, + dt.hour, dt.minute, dt.second); + } + }, value); + return result; } } // namespace fs |