summaryrefslogtreecommitdiffhomepage
path: root/serialize
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2022-10-06 07:11:48 +0200
committerStanislaw Halik <sthalik@misaki.pl>2022-10-06 07:11:48 +0200
commit66ee29df9c19e35b4c126e12e48bc144fe72eb22 (patch)
treec5d8a80cb917a1e33d8efdf6ffc653694e67c759 /serialize
parent9b2b5c5fd5880f35e2e952bb89fc709f4b814364 (diff)
a
Diffstat (limited to 'serialize')
-rw-r--r--serialize/CMakeLists.txt5
-rw-r--r--serialize/tile-atlas.cpp42
-rw-r--r--serialize/tile-atlas.hpp27
3 files changed, 50 insertions, 24 deletions
diff --git a/serialize/CMakeLists.txt b/serialize/CMakeLists.txt
deleted file mode 100644
index e695aff2..00000000
--- a/serialize/CMakeLists.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-find_package(nlohmann_json QUIET REQUIRED)
-set(self "${PROJECT_NAME}-serialize")
-link_libraries(Magnum::Magnum nlohmann_json::nlohmann_json)
-file(GLOB sources "*.cpp" CONFIGURE_ARGS)
-add_library(${self} STATIC ${sources})
diff --git a/serialize/tile-atlas.cpp b/serialize/tile-atlas.cpp
new file mode 100644
index 00000000..0f03e6b2
--- /dev/null
+++ b/serialize/tile-atlas.cpp
@@ -0,0 +1,42 @@
+#include "../tile-atlas.hpp"
+#include "serialize/tile-atlas.hpp"
+#include "serialize/magnum-vector.hpp"
+#include "loader.hpp"
+
+#include <nlohmann/json.hpp>
+
+namespace Magnum::Examples::Serialize {
+
+struct proxy_atlas final {
+ std::string name;
+ Vector2i size;
+};
+
+NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(proxy_atlas, name, size)
+
+} // namespace Magnum::Examples::Serialize
+
+namespace nlohmann {
+
+using namespace Magnum::Examples;
+using namespace Magnum::Examples::Serialize;
+
+using shared_atlas = std::shared_ptr<Magnum::Examples::tile_atlas>;
+
+void adl_serializer<shared_atlas>::to_json(json& j, const shared_atlas& x)
+{
+ if (!x)
+ j = nullptr;
+ else {
+ using nlohmann::to_json;
+ to_json(j, proxy_atlas{x->name(), x->dimensions()});
+ }
+}
+
+void adl_serializer<shared_atlas>::from_json(const json& j, shared_atlas& x)
+{
+ proxy_atlas proxy = j;
+ x = loader.tile_atlas(proxy.name, proxy.size);
+}
+
+} // namespace nlohmann
diff --git a/serialize/tile-atlas.hpp b/serialize/tile-atlas.hpp
index af279251..c49b8a72 100644
--- a/serialize/tile-atlas.hpp
+++ b/serialize/tile-atlas.hpp
@@ -1,27 +1,16 @@
#pragma once
-#include "../tile-atlas.hpp"
-#include <nlohmann/json.hpp>
+#include "loader.hpp"
+#include <memory>
+#include <nlohmann/json_fwd.hpp>
+
+namespace Magnum::Examples { struct tile_atlas; }
namespace nlohmann {
template<>
-struct adl_serializer<Magnum::Examples::tile_atlas> final {
- static void to_json(json& j, const Magnum::Examples::tile_atlas& x);
- static void from_json(const json& j, Magnum::Examples::tile_atlas& x);
+struct adl_serializer<std::shared_ptr<Magnum::Examples::tile_atlas>> final {
+ static void to_json(json& j, const std::shared_ptr<Magnum::Examples::tile_atlas>& x);
+ static void from_json(const json& j, std::shared_ptr<Magnum::Examples::tile_atlas>& x);
};
-void adl_serializer<Magnum::Examples::tile_atlas>::to_json(json& j, const Magnum::Examples::tile_atlas& x)
-{
-}
-
-void adl_serializer<Magnum::Examples::tile_atlas>::from_json(const json& j, Magnum::Examples::tile_atlas& x)
-{
-}
-
} // namespace nlohmann
-
-namespace Magnum::Examples::Serialize {
-
-
-
-} // namespace Magnum::Examples::Serialize