Program Listing for File JsonCast.h¶
↰ Return to documentation for file (include/ari/JsonCast.h
)
#pragma once
#include <string>
#include <vector>
#include <unordered_map>
#include <json.hpp>
#include <Meta.h>
#include "StringCast.h"
using json = nlohmann::json;
template <typename T>
void to_json(json& j, const T& obj);
template <typename T>
void from_json(const json& j, T& obj);
namespace meta
{
template <typename Class,
typename = std::enable_if_t <meta::isRegistered<Class>()>>
json serialize(const Class& obj);
template <typename Class,
typename = std::enable_if_t <!meta::isRegistered<Class>()>,
typename = void>
json serialize(const Class& obj);
template <typename Class>
json serialize_basic(const Class& obj);
// specialization for std::vector
template <typename T>
json serialize_basic(const std::vector<T>& obj);
// specialization for std::unodered_map
template <typename K, typename V>
json serialize_basic(const std::unordered_map<K, V>& obj);
//
//template<typename Class>
//Class deserialize(const json& obj);
template <typename Class,
typename = std::enable_if_t<meta::isRegistered<Class>()>>
void deserialize(Class& obj, const json& object);
template <typename Class,
typename = std::enable_if_t<!meta::isRegistered<Class>()>,
typename = void>
void deserialize(Class& obj, const json& object);
// specialization for std::vector
template <typename T>
void deserialize(std::vector<T>& obj, const json& object);
// specialization for std::unodered_map
template <typename K, typename V>
void deserialize(std::unordered_map<K, V>& obj, const json& object);
}
#include "JsonCast.inl"