diff --git a/src/Utils/Json/JsonExtension.h b/src/Utils/Json/JsonExtension.h index 7f2b761b..b7040d92 100644 --- a/src/Utils/Json/JsonExtension.h +++ b/src/Utils/Json/JsonExtension.h @@ -14,17 +14,19 @@ // partial specialization (full specialization works too) namespace nlohmann { - template void optional_to_json(nlohmann::json& j, const char* name, const std::optional& value) + template::value, int> = 0> + void optional_to_json(BasicJsonType& j, const char* name, const std::optional& value) { if (value) j[name] = *value; } - template void optional_from_json(const nlohmann::json& j, const char* name, std::optional& value) + template::value, int> = 0> + void optional_from_json(const BasicJsonType& j, const char* name, std::optional& value) { const auto it = j.find(name); if (it != j.end() && !it->is_null()) - value = it->get(); + value = it->template get(); else value = std::nullopt; } @@ -32,7 +34,8 @@ namespace nlohmann template constexpr bool is_optional = false; template constexpr bool is_optional> = true; - template void extended_to_json(const char* key, nlohmann::json& j, const T& value) + template::value, int> = 0> + void extended_to_json(const char* key, BasicJsonType& j, const T& value) { if constexpr (is_optional) nlohmann::optional_to_json(j, key, value); @@ -40,7 +43,8 @@ namespace nlohmann j[key] = value; } - template void extended_from_json(const char* key, const nlohmann::json& j, T& value) + template::value, int> = 0> + void extended_from_json(const char* key, const BasicJsonType& j, T& value) { if constexpr (is_optional) 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 NLOHMANN_DEFINE_TYPE_EXTENSION(Type, ...) \ - inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \ + template::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__)) \ } \ - inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \ + template::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__)) \ }