diff options
Diffstat (limited to 'src/lib/formats/fsmeta.cpp')
-rw-r--r-- | src/lib/formats/fsmeta.cpp | 53 |
1 files changed, 21 insertions, 32 deletions
diff --git a/src/lib/formats/fsmeta.cpp b/src/lib/formats/fsmeta.cpp index 41ac767cd11..0e9b51094f0 100644 --- a/src/lib/formats/fsmeta.cpp +++ b/src/lib/formats/fsmeta.cpp @@ -34,48 +34,37 @@ const char *meta_data::entry_name(meta_name name) return ""; } -template<class... Ts> struct overloaded : Ts... { using Ts::operator()...; }; -template<class... Ts> overloaded(Ts...)->overloaded<Ts...>; +template <class... Ts> struct overloaded : Ts... { using Ts::operator()...; }; +template <class... Ts> overloaded(Ts...) -> overloaded<Ts...>; meta_type meta_value::type() const { std::optional<meta_type> result; - std::visit(overloaded - { - [&result](const std::string &) { result = meta_type::string; }, - [&result](std::uint64_t) { result = meta_type::number; }, - [&result](bool) { result = meta_type::flag; }, - [&result](const util::arbitrary_datetime &) { result = meta_type::date; } - }, value); + std::visit( + overloaded{ + [&result] (const std::string &) { result = meta_type::string; }, + [&result] (std::uint64_t) { result = meta_type::number; }, + [&result] (bool) { result = meta_type::flag; }, + [&result] (const util::arbitrary_datetime &) { result = meta_type::date; } }, + value); return *result; } std::string meta_value::to_string() const { std::string result; - - switch (type()) - { - case meta_type::string: - result = as_string(); - break; - case meta_type::number: - result = util::string_format("0x%x", as_number()); - break; - case meta_type::flag: - result = as_flag() ? "t" : "f"; - break; - case meta_type::date: - { - 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); - } - break; - default: - throw false; - } + std::visit( + overloaded{ + [&result] (const std::string &val) { result = val; }, + [&result] (std::uint64_t val) { result = util::string_format("0x%x", val); }, + [&result] (bool val) { result = val ? "t" : "f"; }, + [&result] (const util::arbitrary_datetime &val) + { + result = util::string_format("%04d-%02d-%02d %02d:%02d:%02d", + val.year, val.month, val.day_of_month, + val.hour, val.minute, val.second); + } }, + value); return result; } |