mirror of https://github.com/PurpleI2P/i2pd.git
I2P: End-to-End encrypted and anonymous Internet
https://i2pd.website/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
2.0 KiB
48 lines
2.0 KiB
#pragma once |
|
|
|
#include <type_traits> |
|
#include <utility> |
|
|
|
#include <nlohmann/detail/conversions/from_json.hpp> |
|
#include <nlohmann/detail/conversions/to_json.hpp> |
|
#include <nlohmann/detail/meta/identity_tag.hpp> |
|
#include <nlohmann/detail/meta/type_traits.hpp> |
|
|
|
namespace nlohmann |
|
{ |
|
|
|
/// @sa https://json.nlohmann.me/api/adl_serializer/ |
|
template<typename ValueType, typename> |
|
struct adl_serializer |
|
{ |
|
/// @brief convert a JSON value to any value type |
|
/// @sa https://json.nlohmann.me/api/adl_serializer/from_json/ |
|
template<typename BasicJsonType, typename TargetType = ValueType> |
|
static auto from_json(BasicJsonType && j, TargetType& val) noexcept( |
|
noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val))) |
|
-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), val), void()) |
|
{ |
|
::nlohmann::from_json(std::forward<BasicJsonType>(j), val); |
|
} |
|
|
|
/// @brief convert a JSON value to any value type |
|
/// @sa https://json.nlohmann.me/api/adl_serializer/from_json/ |
|
template<typename BasicJsonType, typename TargetType = ValueType> |
|
static auto from_json(BasicJsonType && j) noexcept( |
|
noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {}))) |
|
-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {})) |
|
{ |
|
return ::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {}); |
|
} |
|
|
|
/// @brief convert any value type to a JSON value |
|
/// @sa https://json.nlohmann.me/api/adl_serializer/to_json/ |
|
template<typename BasicJsonType, typename TargetType = ValueType> |
|
static auto to_json(BasicJsonType& j, TargetType && val) noexcept( |
|
noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val)))) |
|
-> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void()) |
|
{ |
|
::nlohmann::to_json(j, std::forward<TargetType>(val)); |
|
} |
|
}; |
|
} // namespace nlohmann
|
|
|