--- /dev/null
+#ifndef ENUM_H_
+#define ENUM_H_
+
+#include <optional>
+#include <string>
+#include <vector>
+#include <msp/datafile/objectloader.h>
+#include <msp/io/base.h>
+
+class Enum
+{
+public:
+ class Loader: public Msp::DataFile::ObjectLoader<Enum>
+ {
+ public:
+ Loader(Enum &);
+
+ private:
+ void init_actions() override;
+
+ void value(const Msp::DataFile::Symbol &, int);
+ void value_auto(const Msp::DataFile::Symbol &);
+ };
+
+ struct Value
+ {
+ std::string name;
+ std::optional<int> value;
+ };
+
+private:
+ std::string name;
+ std::vector<Value> values;
+
+public:
+ Enum(const std::string &);
+
+ void define_type(Msp::IO::Base &) const;
+ void declare_conversions(Msp::IO::Base &) const;
+ void define_conversions(Msp::IO::Base &) const;
+};
+
+#endif