// // Copyright (c) 2021 Peter Dimov // Copyright (c) 2021 Vinnie Falco (vinnie.falco@gmail.com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // // Official repository: https://github.com/boostorg/json // #ifndef BOOST_JSON_PARSE_INTO_HPP #define BOOST_JSON_PARSE_INTO_HPP #include #include #include #include #include #include namespace boost { namespace json { /** `basic_parser` that parses into a given type This is an alias template for @ref basic_parser instantiations that use a dedicated handler that parses directly into an object provided by the user instead of creating a @ref value. Objects of type `parser_for` have constructor signature equivalent to `parser_for( parse_options const&, T& )`. @tparam T the type to parse into. This type must be [*DefaultConstructible*](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). */ template< class T > using parser_for = #ifndef BOOST_JSON_DOCS basic_parser>; #else __see_below__; #endif /** Parse a JSON text into a user-defined object. This function parses an entire string in one step and fills an object provided by the user. If the buffer does not contain a complete serialized JSON text, an error occurs. In this case `v` may be partially filled. The function supports default constructible types satisfying SequenceContainer, arrays, arithmetic types, `bool`, `std::tuple`, `std::pair`, `std::optional`, `std::nullptr_t`, and structs and enums described using Boost.Describe. @par Complexity Linear in `sv.size()`. @par Exception Safety Basic guarantee. Calls to `memory_resource::allocate` may throw. @param v The type to parse into. @param sv The string to parse. @param ec Set to the error, if any occurred. @param opt The options for the parser. If this parameter is omitted, the parser will accept only standard JSON. */ /** @{ */ template void parse_into( V& v, string_view sv, system::error_code& ec, parse_options const& opt = {} ); template void parse_into( V& v, string_view sv, std::error_code& ec, parse_options const& opt = {} ); /** @} */ /** Parse a JSON text into a user-defined object. This function parses an entire string in one step and fills an object provided by the user. If the buffer does not contain a complete serialized JSON text, an exception is thrown. In this case `v` may be partially filled. The function supports default constructible types satisfying SequenceContainer, arrays, arithmetic types, `bool`, `std::tuple`, `std::pair`, `std::optional`, `std::nullptr_t`, and structs and enums described using Boost.Describe. @par Complexity Linear in `sv.size()`. @par Exception Safety Basic guarantee. Calls to `memory_resource::allocate` may throw. @param v The type to parse into. @param sv The string to parse. @param opt The options for the parser. If this parameter is omitted, the parser will accept only standard JSON. @throw `boost::system::system_error` on failed parse. */ template void parse_into( V& v, string_view sv, parse_options const& opt = {} ); /** Parse a JSON text into a user-defined object. This function reads data from an input stream and fills an object provided by the user. If the buffer does not contain a complete serialized JSON text, or contains extra non-whitespace data, an error occurs. In this case `v` may be partially filled. The function supports default constructible types satisfying SequenceContainer, arrays, arithmetic types, `bool`, `std::tuple`, `std::pair`, `std::optional`, `std::nullptr_t`, and structs and enums described using Boost.Describe. @par Complexity Linear in the size of consumed input. @par Exception Safety Basic guarantee. Calls to `memory_resource::allocate` may throw. The stream may throw as described by [`std::ios::exceptions`](https://en.cppreference.com/w/cpp/io/basic_ios/exceptions). @param v The type to parse into. @param is The stream to read from. @param ec Set to the error, if any occurred. @param opt The options for the parser. If this parameter is omitted, the parser will accept only standard JSON. */ /** @{ */ template void parse_into( V& v, std::istream& is, system::error_code& ec, parse_options const& opt = {} ); template void parse_into( V& v, std::istream& is, std::error_code& ec, parse_options const& opt = {} ); /** @} */ /** Parse a JSON text into a user-defined object. This function reads data from an input stream and fills an object provided by the user. If the buffer does not contain a complete serialized JSON text, or contains extra non-whitespace data, an exception is thrown. In this case `v` may be partially filled. The function supports default constructible types satisfying SequenceContainer, arrays, arithmetic types, `bool`, `std::tuple`, `std::pair`, `std::optional`, `std::nullptr_t`, and structs and enums described using Boost.Describe. @par Complexity Linear in the size of consumed input. @par Exception Safety Basic guarantee. Calls to `memory_resource::allocate` may throw. The stream may throw as described by [`std::ios::exceptions`](https://en.cppreference.com/w/cpp/io/basic_ios/exceptions). @param v The type to parse into. @param is The stream to read from. @param opt The options for the parser. If this parameter is omitted, the parser will accept only standard JSON. @throw `boost::system::system_error` on failed parse. */ template void parse_into( V& v, std::istream& is, parse_options const& opt = {} ); } // namespace boost } // namespace json #include #endif