diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2024-07-25 16:38:30 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2024-07-25 16:47:02 +0200 |
| commit | d0b5c8c14d4a41b39470821d43dd719dbb5246aa (patch) | |
| tree | 82dad7cc061af7957d7ca9f41eac6fa004640b2c /core/include | |
| parent | 2b9ad3fbcbea86bd2cf702ff4c6e603c33492e45 (diff) | |
| download | turns-d0b5c8c14d4a41b39470821d43dd719dbb5246aa.tar.xz turns-d0b5c8c14d4a41b39470821d43dd719dbb5246aa.zip | |
core/turn_order: implement basic serialization
Diffstat (limited to 'core/include')
| -rw-r--r-- | core/include/turns/core/json_ext.hpp | 43 | ||||
| -rw-r--r-- | core/include/turns/core/turn_order.hpp | 8 |
2 files changed, 51 insertions, 0 deletions
diff --git a/core/include/turns/core/json_ext.hpp b/core/include/turns/core/json_ext.hpp new file mode 100644 index 0000000..3eedb64 --- /dev/null +++ b/core/include/turns/core/json_ext.hpp @@ -0,0 +1,43 @@ +#ifndef TURNS_CORE_JSON_EXT_HPP +#define TURNS_CORE_JSON_EXT_HPP + +#include <glibmm/property.h> +#include <glibmm/ustring.h> + +#include <nlohmann/json.hpp> + +#include <string> + +NLOHMANN_JSON_NAMESPACE_BEGIN + +template<typename T> +struct adl_serializer<Glib::Property<T>> +{ + static void to_json(json & to, Glib::Property<T> const & from) + { + to = from.get_value(); + } + + static void from_json(json const & from, Glib::Property<T> & to) + { + to = from.template get<T>(); + } +}; + +template<> +struct adl_serializer<Glib::ustring> +{ + static void to_json(json & to, Glib::ustring const & from) + { + to = static_cast<std::string>(from); + } + + static void from_json(json const & from, Glib::ustring & to) + { + to = from.template get<std::string>(); + } +}; + +NLOHMANN_JSON_NAMESPACE_END + +#endif
\ No newline at end of file diff --git a/core/include/turns/core/turn_order.hpp b/core/include/turns/core/turn_order.hpp index 59556bb..5dbc6c6 100644 --- a/core/include/turns/core/turn_order.hpp +++ b/core/include/turns/core/turn_order.hpp @@ -14,6 +14,8 @@ #include <optional> #include <vector> +#include <nlohmann/json_fwd.hpp> + namespace turns::core { @@ -40,6 +42,7 @@ namespace turns::core turn_order(); auto static create() -> Glib::RefPtr<turn_order>; + auto static create(nlohmann::json const & from) -> Glib::RefPtr<turn_order>; /** Properties */ auto is_empty() const -> Glib::PropertyProxy_ReadOnly<is_empty_type>; @@ -60,7 +63,12 @@ namespace turns::core auto start() -> void; auto stop() -> void; + /** Serialization */ + auto serialize() -> nlohmann::json; + private: + explicit turn_order(nlohmann::json const & from); + auto get_item_type_vfunc() -> GType override; auto get_n_items_vfunc() -> unsigned override; auto get_item_vfunc(unsigned position) -> void * override; |
