simdjson: include/simdjson/error.h Source File

1#ifndef SIMDJSON_ERROR_H

2#define SIMDJSON_ERROR_H

3

4#include "simdjson/base.h"

5

6#include <string>

7#include <ostream>

8

10

55

63

82

86inline std::ostream& operator<<(std::ostream& out, error_code error) noexcept;

87

105

106namespace internal {

107

132template<typename T>

133struct simdjson_result_base : protected std::pair<T, error_code> {

134

138 simdjson_inline simdjson_result_base() noexcept;

139

143 simdjson_inline simdjson_result_base(error_code error) noexcept;

144

148 simdjson_inline simdjson_result_base(T &&value) noexcept;

149

153 simdjson_inline simdjson_result_base(T &&value, error_code error) noexcept;

154

161 simdjson_inline void tie(T &value, error_code &error) && noexcept;

162

168 simdjson_inline error_code get(T &value) && noexcept;

169

173 simdjson_inline error_code error() const noexcept;

174

178 simdjson_inline bool has_value() const noexcept;

179#if SIMDJSON_EXCEPTIONS

180

186 simdjson_inline T& operator*() & noexcept(false);

187 simdjson_inline T&& operator*() && noexcept(false);

193 simdjson_inline T* operator->() noexcept(false);

194 simdjson_inline const T* operator->() const noexcept(false);

195

201 simdjson_inline T& value() & noexcept(false);

202

208 simdjson_inline T&& value() && noexcept(false);

209

215 simdjson_inline T&& take_value() && noexcept(false);

216

222 simdjson_inline operator T&&() && noexcept(false);

223

224#endif

225

244 simdjson_inline const T& value_unsafe() const& noexcept;

245

266 simdjson_inline T&& value_unsafe() && noexcept;

267

268 using value_type = T;

270};

271

272}

273

279template<typename T>

281

298

305 simdjson_inline void tie(T &value, error_code &error) && noexcept;

306

312 simdjson_warn_unused simdjson_inline error_code get(T &value) && noexcept;

313

319 template <typename U = T>

320 simdjson_warn_unused simdjson_inline error_code get(std::string &value) && noexcept {

321 static_assert(std::is_same<U, std::string_view>::value, "SFINAE");

322 std::string_view v;

323 error_code error = std::forward<simdjson_result<T>>(*this).get(v);

324 if (!error) {

325 value.assign(v.data(), v.size());

326 }

327 return error;

328 }

329

333 simdjson_inline error_code error() const noexcept;

334

335

336

337#if SIMDJSON_EXCEPTIONS

338 using internal::simdjson_result_base<T>::operator*;

339 using internal::simdjson_result_base<T>::operator->;

345 simdjson_inline T& value() & noexcept(false);

346

352 simdjson_inline T&& value() && noexcept(false);

353

359 simdjson_inline T&& take_value() && noexcept(false);

360

366 simdjson_inline operator T&&() && noexcept(false);

367#endif

368

373 simdjson_inline const T& value_unsafe() const& noexcept;

374

379 simdjson_inline T&& value_unsafe() && noexcept;

380

381 using value_type = T;

383};

384

385#if SIMDJSON_EXCEPTIONS

386

387template<typename T>

388inline std::ostream& operator<<(std::ostream& out, simdjson_result<T> value) { return out << value.value(); }

389#endif

390

391#ifndef SIMDJSON_DISABLE_DEPRECATED_API

395using ErrorValues [[deprecated("This is an alias and will be removed, use error_code instead")]] = error_code;

396

400[[deprecated("Error codes should be stored and returned as `error_code`, use `error_message()` instead.")]]

401inline const std::string error_message(int error) noexcept;

402#endif

403}

404

405#endif

The top level simdjson namespace, containing everything the library provides.

const char * error_message(error_code error) noexcept

It is the convention throughout the code that the macro SIMDJSON_DEVELOPMENT_CHECKS determines whethe...

error_code

All possible errors returned by simdjson.

@ SCALAR_DOCUMENT_AS_VALUE

A scalar document is treated as a value.

@ DEPTH_ERROR

Your document exceeds the user-specified depth limitation.

@ UNCLOSED_STRING

missing quote at the end

@ INCORRECT_TYPE

JSON element has a different type than user expected.

@ CAPACITY

This parser can't support a document that big.

@ OUT_OF_ORDER_ITERATION

tried to iterate an array or object out of order (checked when SIMDJSON_DEVELOPMENT_CHECKS=1)

@ UTF8_ERROR

the input is not valid UTF-8

@ OUT_OF_CAPACITY

The capacity was exceeded, we cannot allocate enough memory.

@ OUT_OF_BOUNDS

Attempted to access location outside of document.

@ TAPE_ERROR

Something went wrong, this is a generic error. Fatal/unrecoverable error.

@ NO_SUCH_FIELD

JSON field not found in object.

@ UNSUPPORTED_ARCHITECTURE

unsupported architecture

@ N_ATOM_ERROR

Problem while parsing an atom starting with the letter 'n'.

@ NUM_ERROR_CODES

Placeholder for end of error code list.

@ EMPTY

no structural element found

@ INVALID_URI_FRAGMENT

Invalid URI fragment.

@ INDEX_OUT_OF_BOUNDS

JSON array index too large.

@ NUMBER_OUT_OF_RANGE

JSON number does not fit in 64 bits.

@ STRING_ERROR

Problem while parsing a string.

@ MEMALLOC

Error allocating memory, most likely out of memory.

@ T_ATOM_ERROR

Problem while parsing an atom starting with the letter 't'.

@ TRAILING_CONTENT

Unexpected trailing content in the JSON input.

@ INCOMPLETE_ARRAY_OR_OBJECT

The document ends early. Fatal/unrecoverable error.

@ UNEXPECTED_ERROR

indicative of a bug in simdjson

@ UNINITIALIZED

unknown error, or uninitialized document

@ UNESCAPED_CHARS

found unescaped characters in a string.

@ IO_ERROR

Error reading a file.

@ NUMBER_ERROR

Problem while parsing a number.

@ BIGINT_ERROR

The integer value exceeds 64 bits.

@ F_ATOM_ERROR

Problem while parsing an atom starting with the letter 'f'.

@ PARSER_IN_USE

parser is already in use.

@ INSUFFICIENT_PADDING

The JSON doesn't have enough padding for simdjson to safely parse it.

@ INVALID_JSON_POINTER

Invalid JSON pointer syntax.

bool is_fatal(error_code error) noexcept

Some errors are fatal and invalidate the document.

Exception thrown when an exception-supporting simdjson method is called.

const char * what() const noexcept override

The error message.

error_code error() const noexcept

The error code.

simdjson_error(error_code error) noexcept

Create an exception from a simdjson error code.

The result of a simdjson operation that could fail.

simdjson_warn_unused simdjson_inline error_code get(std::string &value) &&noexcept

Copy the value to a provided std::string, only enabled for std::string_view.