123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- //
- // Copyright (c) 2021 Peter Dimov
- // Copyright (c) 2021 Vinnie Falco ([email protected])
- //
- // 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 <boost/json/detail/config.hpp>
- #include <boost/json/basic_parser.hpp>
- #include <boost/json/string_view.hpp>
- #include <boost/json/system_error.hpp>
- #include <boost/json/detail/parse_into.hpp>
- #include <boost/system/result.hpp>
- 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<T>` 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<detail::into_handler<T>>;
- #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
- <a href="https://en.cppreference.com/w/cpp/named_req/SequenceContainer"><em>SequenceContainer</em></a>,
- 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<class V>
- void
- parse_into(
- V& v,
- string_view sv,
- system::error_code& ec,
- parse_options const& opt = {} );
- template<class V>
- 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
- <a href="https://en.cppreference.com/w/cpp/named_req/SequenceContainer"><em>SequenceContainer</em></a>,
- 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<class V>
- 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
- <a href="https://en.cppreference.com/w/cpp/named_req/SequenceContainer"><em>SequenceContainer</em></a>,
- 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<class V>
- void
- parse_into(
- V& v,
- std::istream& is,
- system::error_code& ec,
- parse_options const& opt = {} );
- template<class V>
- 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
- <a href="https://en.cppreference.com/w/cpp/named_req/SequenceContainer"><em>SequenceContainer</em></a>,
- 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<class V>
- void
- parse_into(
- V& v,
- std::istream& is,
- parse_options const& opt = {} );
- } // namespace boost
- } // namespace json
- #include <boost/json/impl/parse_into.hpp>
- #endif
|