aboutsummaryrefslogtreecommitdiff
path: root/src/jsonable.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/jsonable.h')
-rw-r--r--src/jsonable.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/jsonable.h b/src/jsonable.h
index 7411efa..01c720b 100644
--- a/src/jsonable.h
+++ b/src/jsonable.h
@@ -1,5 +1,7 @@
#pragma once
#include "json.hpp"
+#include <memory>
+#include <vector>
class Jsonable {
public:
@@ -7,3 +9,18 @@ class Jsonable {
operator nlohmann::json() const {return toJson();}
virtual ~Jsonable() {}
};
+
+namespace nlohmann {
+ template <typename T> struct adl_serializer<std::shared_ptr<T>> {
+ static void to_json(json& j, const std::shared_ptr<T>& opt) {
+ if(opt) {
+ j = *opt;
+ } else {
+ j = nullptr;
+ }
+ }
+ static void from_json(const json& j, std::shared_ptr<T>& opt) {
+ opt = std::shared_ptr<T>(T::create(j));
+ }
+ };
+}