summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/fsmgr.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/fsmgr.h')
-rw-r--r--src/lib/formats/fsmgr.h19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/lib/formats/fsmgr.h b/src/lib/formats/fsmgr.h
index 5dc328eb817..f0c4ba13539 100644
--- a/src/lib/formats/fsmgr.h
+++ b/src/lib/formats/fsmgr.h
@@ -40,7 +40,24 @@ enum class fs_dir_entry_type {
system_file,
};
-using fs_meta = std::variant<std::string, uint64_t, bool, util::arbitrary_datetime>;
+class fs_meta {
+public:
+ fs_meta() { value = false; }
+ fs_meta(std::string str) { value = str; }
+ fs_meta(bool b) { value = b; }
+ fs_meta(uint64_t num) { value = num; }
+ fs_meta(int64_t num) { value = uint64_t(num); }
+ fs_meta(util::arbitrary_datetime dt) { value = dt; }
+
+ util::arbitrary_datetime as_date() const { return *std::get_if<util::arbitrary_datetime>(&value); }
+ bool as_flag() const { return *std::get_if<bool>(&value); }
+ uint64_t as_number() const { return *std::get_if<uint64_t>(&value); }
+ std::string as_string() const { return *std::get_if<std::string>(&value); }
+
+private:
+ std::variant<std::string, uint64_t, bool, util::arbitrary_datetime> value;
+};
+
using fs_meta_data = std::unordered_map<fs_meta_name, fs_meta>;
const char *fs_meta_get_name(fs_meta_name name);