1 #pragma once
2 
3 #include <utility>
4 
5 #include <nlohmann/detail/conversions/from_json.hpp>
6 #include <nlohmann/detail/conversions/to_json.hpp>
7 
8 namespace nlohmann
9 {
10 
11 template<typename, typename>
12 struct adl_serializer
13 {
14     /*!
15     @brief convert a JSON value to any value type
16 
17     This function is usually called by the `get()` function of the
18     @ref basic_json class (either explicit or via conversion operators).
19 
20     @param[in] j        JSON value to read from
21     @param[in,out] val  value to write to
22     */
23     template<typename BasicJsonType, typename ValueType>
from_jsonnlohmann::adl_serializer24     static auto from_json(BasicJsonType&& j, ValueType& val) noexcept(
25         noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))
26     -> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), val), void())
27     {
28         ::nlohmann::from_json(std::forward<BasicJsonType>(j), val);
29     }
30 
31     /*!
32     @brief convert any value type to a JSON value
33 
34     This function is usually called by the constructors of the @ref basic_json
35     class.
36 
37     @param[in,out] j  JSON value to write to
38     @param[in] val    value to read from
39     */
40     template<typename BasicJsonType, typename ValueType>
to_jsonnlohmann::adl_serializer41     static auto to_json(BasicJsonType& j, ValueType&& val) noexcept(
42         noexcept(::nlohmann::to_json(j, std::forward<ValueType>(val))))
43     -> decltype(::nlohmann::to_json(j, std::forward<ValueType>(val)), void())
44     {
45         ::nlohmann::to_json(j, std::forward<ValueType>(val));
46     }
47 };
48 
49 }  // namespace nlohmann
50