mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-04-21 10:58:44 +00:00
chore: allow arbitary type conversions for ordered_json
This commit is contained in:
@@ -14,17 +14,19 @@
|
|||||||
// partial specialization (full specialization works too)
|
// partial specialization (full specialization works too)
|
||||||
namespace nlohmann
|
namespace nlohmann
|
||||||
{
|
{
|
||||||
template<class T> void optional_to_json(nlohmann::json& j, const char* name, const std::optional<T>& value)
|
template<class T, typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>
|
||||||
|
void optional_to_json(BasicJsonType& j, const char* name, const std::optional<T>& value)
|
||||||
{
|
{
|
||||||
if (value)
|
if (value)
|
||||||
j[name] = *value;
|
j[name] = *value;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T> void optional_from_json(const nlohmann::json& j, const char* name, std::optional<T>& value)
|
template<class T, typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>
|
||||||
|
void optional_from_json(const BasicJsonType& j, const char* name, std::optional<T>& value)
|
||||||
{
|
{
|
||||||
const auto it = j.find(name);
|
const auto it = j.find(name);
|
||||||
if (it != j.end() && !it->is_null())
|
if (it != j.end() && !it->is_null())
|
||||||
value = it->get<T>();
|
value = it->template get<T>();
|
||||||
else
|
else
|
||||||
value = std::nullopt;
|
value = std::nullopt;
|
||||||
}
|
}
|
||||||
@@ -32,7 +34,8 @@ namespace nlohmann
|
|||||||
template<typename> constexpr bool is_optional = false;
|
template<typename> constexpr bool is_optional = false;
|
||||||
template<typename T> constexpr bool is_optional<std::optional<T>> = true;
|
template<typename T> constexpr bool is_optional<std::optional<T>> = true;
|
||||||
|
|
||||||
template<typename T> void extended_to_json(const char* key, nlohmann::json& j, const T& value)
|
template<typename T, typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>
|
||||||
|
void extended_to_json(const char* key, BasicJsonType& j, const T& value)
|
||||||
{
|
{
|
||||||
if constexpr (is_optional<T>)
|
if constexpr (is_optional<T>)
|
||||||
nlohmann::optional_to_json(j, key, value);
|
nlohmann::optional_to_json(j, key, value);
|
||||||
@@ -40,7 +43,8 @@ namespace nlohmann
|
|||||||
j[key] = value;
|
j[key] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T> void extended_from_json(const char* key, const nlohmann::json& j, T& value)
|
template<typename T, typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>
|
||||||
|
void extended_from_json(const char* key, const BasicJsonType& j, T& value)
|
||||||
{
|
{
|
||||||
if constexpr (is_optional<T>)
|
if constexpr (is_optional<T>)
|
||||||
nlohmann::optional_from_json(j, key, value);
|
nlohmann::optional_from_json(j, key, value);
|
||||||
@@ -53,11 +57,13 @@ namespace nlohmann
|
|||||||
#define EXTEND_JSON_FROM(v1) extended_from_json(#v1, nlohmann_json_j, nlohmann_json_t.v1);
|
#define EXTEND_JSON_FROM(v1) extended_from_json(#v1, nlohmann_json_j, nlohmann_json_t.v1);
|
||||||
|
|
||||||
#define NLOHMANN_DEFINE_TYPE_EXTENSION(Type, ...) \
|
#define NLOHMANN_DEFINE_TYPE_EXTENSION(Type, ...) \
|
||||||
inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
|
template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
|
||||||
|
inline void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) \
|
||||||
{ \
|
{ \
|
||||||
NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(EXTEND_JSON_TO, __VA_ARGS__)) \
|
NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(EXTEND_JSON_TO, __VA_ARGS__)) \
|
||||||
} \
|
} \
|
||||||
inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
|
template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
|
||||||
|
inline void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) \
|
||||||
{ \
|
{ \
|
||||||
NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(EXTEND_JSON_FROM, __VA_ARGS__)) \
|
NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(EXTEND_JSON_FROM, __VA_ARGS__)) \
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user