| 5173 | */ |
| 5174 | template<typename BasicJsonType, typename SAX = json_sax_dom_parser<BasicJsonType>> |
| 5175 | class binary_reader |
| 5176 | { |
| 5177 | using number_integer_t = typename BasicJsonType::number_integer_t; |
| 5178 | using number_unsigned_t = typename BasicJsonType::number_unsigned_t; |
| 5179 | using number_float_t = typename BasicJsonType::number_float_t; |
| 5180 | using string_t = typename BasicJsonType::string_t; |
| 5181 | using json_sax_t = SAX; |
| 5182 | |
| 5183 | public: |
| 5184 | /*! |
| 5185 | @brief create a binary reader |
| 5186 | |
| 5187 | @param[in] adapter input adapter to read from |
| 5188 | */ |
| 5189 | explicit binary_reader(input_adapter_t adapter) : ia(std::move(adapter)) |
| 5190 | { |
| 5191 | (void)detail::is_sax_static_asserts<SAX, BasicJsonType> {}; |
| 5192 | assert(ia); |
| 5193 | } |
| 5194 | |
| 5195 | // make class move-only |
| 5196 | binary_reader(const binary_reader&) = delete; |
| 5197 | binary_reader(binary_reader&&) = default; |
| 5198 | binary_reader& operator=(const binary_reader&) = delete; |
| 5199 | binary_reader& operator=(binary_reader&&) = default; |
| 5200 | ~binary_reader() = default; |
| 5201 | |
| 5202 | /*! |
| 5203 | @param[in] format the binary format to parse |
| 5204 | @param[in] sax_ a SAX event processor |
| 5205 | @param[in] strict whether to expect the input to be consumed completed |
| 5206 | |
| 5207 | @return |
| 5208 | */ |
| 5209 | JSON_HEDLEY_NON_NULL(3) |
| 5210 | bool sax_parse(const input_format_t format, |
| 5211 | json_sax_t* sax_, |
| 5212 | const bool strict = true) |
| 5213 | { |
| 5214 | sax = sax_; |
| 5215 | bool result = false; |
| 5216 | |
| 5217 | switch (format) |
| 5218 | { |
| 5219 | case input_format_t::bson: |
| 5220 | result = parse_bson_internal(); |
| 5221 | break; |
| 5222 | |
| 5223 | case input_format_t::cbor: |
| 5224 | result = parse_cbor_internal(); |
| 5225 | break; |
| 5226 | |
| 5227 | case input_format_t::msgpack: |
| 5228 | result = parse_msgpack_internal(); |
| 5229 | break; |
| 5230 | |
| 5231 | case input_format_t::ubjson: |
| 5232 | result = parse_ubjson_internal(); |
no test coverage detected