Full Code of ijl/orjson for AI

master ec2b066cae79 cached
570 files
1.3 MB
404.4k tokens
2696 symbols
1 requests
Download .txt
Showing preview only (1,504K chars total). Download the full file or copy to clipboard to get everything.
Repository: ijl/orjson
Branch: master
Commit: ec2b066cae79
Files: 570
Total size: 1.3 MB

Directory structure:
gitextract_wnu8x3ig/

├── .gitattributes
├── .github/
│   ├── actions/
│   │   └── manylinux/
│   │       └── action.yaml
│   └── workflows/
│       ├── artifact.yaml
│       ├── lint.yaml
│       └── unusual.yaml
├── .gitignore
├── CHANGELOG.md
├── Cargo.toml
├── LICENSE-APACHE
├── LICENSE-MIT
├── LICENSE-MPL-2.0
├── README.md
├── bench/
│   ├── __init__.py
│   ├── benchmark_dumps.py
│   ├── benchmark_loads.py
│   ├── data.py
│   ├── requirements.txt
│   ├── run_func
│   └── util.py
├── build.rs
├── ci/
│   ├── config.toml
│   └── sdist.toml
├── data/
│   ├── blns.txt.xz
│   ├── canada.json.xz
│   ├── citm_catalog.json.xz
│   ├── github.json.xz
│   ├── issue331_1.json.xz
│   ├── issue331_2.json.xz
│   ├── jsonchecker/
│   │   ├── fail01.json
│   │   ├── fail02.json
│   │   ├── fail03.json
│   │   ├── fail04.json
│   │   ├── fail05.json
│   │   ├── fail06.json
│   │   ├── fail07.json
│   │   ├── fail08.json
│   │   ├── fail09.json
│   │   ├── fail10.json
│   │   ├── fail11.json
│   │   ├── fail12.json
│   │   ├── fail13.json
│   │   ├── fail14.json
│   │   ├── fail15.json
│   │   ├── fail16.json
│   │   ├── fail17.json
│   │   ├── fail18.json
│   │   ├── fail19.json
│   │   ├── fail20.json
│   │   ├── fail21.json
│   │   ├── fail22.json
│   │   ├── fail23.json
│   │   ├── fail24.json
│   │   ├── fail25.json
│   │   ├── fail26.json
│   │   ├── fail27.json
│   │   ├── fail28.json
│   │   ├── fail29.json
│   │   ├── fail30.json
│   │   ├── fail31.json
│   │   ├── fail32.json
│   │   ├── fail33.json
│   │   ├── pass01.json
│   │   ├── pass02.json
│   │   └── pass03.json
│   ├── parsing/
│   │   ├── i_number_double_huge_neg_exp.json
│   │   ├── i_number_huge_exp.json
│   │   ├── i_number_neg_int_huge_exp.json
│   │   ├── i_number_pos_double_huge_exp.json
│   │   ├── i_number_real_neg_overflow.json
│   │   ├── i_number_real_pos_overflow.json
│   │   ├── i_number_real_underflow.json
│   │   ├── i_number_too_big_neg_int.json
│   │   ├── i_number_too_big_pos_int.json
│   │   ├── i_number_very_big_negative_int.json
│   │   ├── i_object_key_lone_2nd_surrogate.json
│   │   ├── i_string_1st_surrogate_but_2nd_missing.json
│   │   ├── i_string_1st_valid_surrogate_2nd_invalid.json
│   │   ├── i_string_UTF-16LE_with_BOM.json
│   │   ├── i_string_UTF-8_invalid_sequence.json
│   │   ├── i_string_UTF8_surrogate_U+D800.json
│   │   ├── i_string_incomplete_surrogate_and_escape_valid.json
│   │   ├── i_string_incomplete_surrogate_pair.json
│   │   ├── i_string_incomplete_surrogates_escape_valid.json
│   │   ├── i_string_invalid_lonely_surrogate.json
│   │   ├── i_string_invalid_surrogate.json
│   │   ├── i_string_invalid_utf-8.json
│   │   ├── i_string_inverted_surrogates_U+1D11E.json
│   │   ├── i_string_iso_latin_1.json
│   │   ├── i_string_lone_second_surrogate.json
│   │   ├── i_string_lone_utf8_continuation_byte.json
│   │   ├── i_string_not_in_unicode_range.json
│   │   ├── i_string_overlong_sequence_2_bytes.json
│   │   ├── i_string_overlong_sequence_6_bytes.json
│   │   ├── i_string_overlong_sequence_6_bytes_null.json
│   │   ├── i_string_truncated-utf-8.json
│   │   ├── i_string_utf16BE_no_BOM.json
│   │   ├── i_string_utf16LE_no_BOM.json
│   │   ├── i_structure_500_nested_arrays.json.xz
│   │   ├── i_structure_UTF-8_BOM_empty_object.json
│   │   ├── n_array_1_true_without_comma.json
│   │   ├── n_array_a_invalid_utf8.json
│   │   ├── n_array_colon_instead_of_comma.json
│   │   ├── n_array_comma_after_close.json
│   │   ├── n_array_comma_and_number.json
│   │   ├── n_array_double_comma.json
│   │   ├── n_array_double_extra_comma.json
│   │   ├── n_array_extra_close.json
│   │   ├── n_array_extra_comma.json
│   │   ├── n_array_incomplete.json
│   │   ├── n_array_incomplete_invalid_value.json
│   │   ├── n_array_inner_array_no_comma.json
│   │   ├── n_array_invalid_utf8.json
│   │   ├── n_array_items_separated_by_semicolon.json
│   │   ├── n_array_just_comma.json
│   │   ├── n_array_just_minus.json
│   │   ├── n_array_missing_value.json
│   │   ├── n_array_newlines_unclosed.json
│   │   ├── n_array_number_and_comma.json
│   │   ├── n_array_number_and_several_commas.json
│   │   ├── n_array_spaces_vertical_tab_formfeed.json
│   │   ├── n_array_star_inside.json
│   │   ├── n_array_unclosed.json
│   │   ├── n_array_unclosed_trailing_comma.json
│   │   ├── n_array_unclosed_with_new_lines.json
│   │   ├── n_array_unclosed_with_object_inside.json
│   │   ├── n_incomplete_false.json
│   │   ├── n_incomplete_null.json
│   │   ├── n_incomplete_true.json
│   │   ├── n_multidigit_number_then_00.json
│   │   ├── n_number_++.json
│   │   ├── n_number_+1.json
│   │   ├── n_number_+Inf.json
│   │   ├── n_number_-01.json
│   │   ├── n_number_-1.0..json
│   │   ├── n_number_-2..json
│   │   ├── n_number_-NaN.json
│   │   ├── n_number_.-1.json
│   │   ├── n_number_.2e-3.json
│   │   ├── n_number_0.1.2.json
│   │   ├── n_number_0.3e+.json
│   │   ├── n_number_0.3e.json
│   │   ├── n_number_0.e1.json
│   │   ├── n_number_0_capital_E+.json
│   │   ├── n_number_0_capital_E.json
│   │   ├── n_number_0e+.json
│   │   ├── n_number_0e.json
│   │   ├── n_number_1.0e+.json
│   │   ├── n_number_1.0e-.json
│   │   ├── n_number_1.0e.json
│   │   ├── n_number_1_000.json
│   │   ├── n_number_1eE2.json
│   │   ├── n_number_2.e+3.json
│   │   ├── n_number_2.e-3.json
│   │   ├── n_number_2.e3.json
│   │   ├── n_number_9.e+.json
│   │   ├── n_number_Inf.json
│   │   ├── n_number_NaN.json
│   │   ├── n_number_U+FF11_fullwidth_digit_one.json
│   │   ├── n_number_expression.json
│   │   ├── n_number_hex_1_digit.json
│   │   ├── n_number_hex_2_digits.json
│   │   ├── n_number_infinity.json
│   │   ├── n_number_invalid+-.json
│   │   ├── n_number_invalid-negative-real.json
│   │   ├── n_number_invalid-utf-8-in-bigger-int.json
│   │   ├── n_number_invalid-utf-8-in-exponent.json
│   │   ├── n_number_invalid-utf-8-in-int.json
│   │   ├── n_number_minus_infinity.json
│   │   ├── n_number_minus_sign_with_trailing_garbage.json
│   │   ├── n_number_minus_space_1.json
│   │   ├── n_number_neg_int_starting_with_zero.json
│   │   ├── n_number_neg_real_without_int_part.json
│   │   ├── n_number_neg_with_garbage_at_end.json
│   │   ├── n_number_real_garbage_after_e.json
│   │   ├── n_number_real_with_invalid_utf8_after_e.json
│   │   ├── n_number_real_without_fractional_part.json
│   │   ├── n_number_starting_with_dot.json
│   │   ├── n_number_with_alpha.json
│   │   ├── n_number_with_alpha_char.json
│   │   ├── n_number_with_leading_zero.json
│   │   ├── n_object_bad_value.json
│   │   ├── n_object_bracket_key.json
│   │   ├── n_object_comma_instead_of_colon.json
│   │   ├── n_object_double_colon.json
│   │   ├── n_object_emoji.json
│   │   ├── n_object_garbage_at_end.json
│   │   ├── n_object_key_with_single_quotes.json
│   │   ├── n_object_lone_continuation_byte_in_key_and_trailing_comma.json
│   │   ├── n_object_missing_colon.json
│   │   ├── n_object_missing_key.json
│   │   ├── n_object_missing_semicolon.json
│   │   ├── n_object_missing_value.json
│   │   ├── n_object_no-colon.json
│   │   ├── n_object_non_string_key.json
│   │   ├── n_object_non_string_key_but_huge_number_instead.json
│   │   ├── n_object_repeated_null_null.json
│   │   ├── n_object_several_trailing_commas.json
│   │   ├── n_object_single_quote.json
│   │   ├── n_object_trailing_comma.json
│   │   ├── n_object_trailing_comment.json
│   │   ├── n_object_trailing_comment_open.json
│   │   ├── n_object_trailing_comment_slash_open.json
│   │   ├── n_object_trailing_comment_slash_open_incomplete.json
│   │   ├── n_object_two_commas_in_a_row.json
│   │   ├── n_object_unquoted_key.json
│   │   ├── n_object_unterminated-value.json
│   │   ├── n_object_with_single_string.json
│   │   ├── n_object_with_trailing_garbage.json
│   │   ├── n_single_space.json
│   │   ├── n_string_1_surrogate_then_escape.json
│   │   ├── n_string_1_surrogate_then_escape_u.json
│   │   ├── n_string_1_surrogate_then_escape_u1.json
│   │   ├── n_string_1_surrogate_then_escape_u1x.json
│   │   ├── n_string_accentuated_char_no_quotes.json
│   │   ├── n_string_backslash_00.json
│   │   ├── n_string_escape_x.json
│   │   ├── n_string_escaped_backslash_bad.json
│   │   ├── n_string_escaped_ctrl_char_tab.json
│   │   ├── n_string_escaped_emoji.json
│   │   ├── n_string_incomplete_escape.json
│   │   ├── n_string_incomplete_escaped_character.json
│   │   ├── n_string_incomplete_surrogate.json
│   │   ├── n_string_incomplete_surrogate_escape_invalid.json
│   │   ├── n_string_invalid-utf-8-in-escape.json
│   │   ├── n_string_invalid_backslash_esc.json
│   │   ├── n_string_invalid_unicode_escape.json
│   │   ├── n_string_invalid_utf8_after_escape.json
│   │   ├── n_string_leading_uescaped_thinspace.json
│   │   ├── n_string_no_quotes_with_bad_escape.json
│   │   ├── n_string_single_doublequote.json
│   │   ├── n_string_single_quote.json
│   │   ├── n_string_single_string_no_double_quotes.json
│   │   ├── n_string_start_escape_unclosed.json
│   │   ├── n_string_unescaped_crtl_char.json
│   │   ├── n_string_unescaped_newline.json
│   │   ├── n_string_unescaped_tab.json
│   │   ├── n_string_unicode_CapitalU.json
│   │   ├── n_string_with_trailing_garbage.json
│   │   ├── n_structure_100000_opening_arrays.json.xz
│   │   ├── n_structure_U+2060_word_joined.json
│   │   ├── n_structure_UTF8_BOM_no_data.json
│   │   ├── n_structure_angle_bracket_..json
│   │   ├── n_structure_angle_bracket_null.json
│   │   ├── n_structure_array_trailing_garbage.json
│   │   ├── n_structure_array_with_extra_array_close.json
│   │   ├── n_structure_array_with_unclosed_string.json
│   │   ├── n_structure_ascii-unicode-identifier.json
│   │   ├── n_structure_capitalized_True.json
│   │   ├── n_structure_close_unopened_array.json
│   │   ├── n_structure_comma_instead_of_closing_brace.json
│   │   ├── n_structure_double_array.json
│   │   ├── n_structure_end_array.json
│   │   ├── n_structure_incomplete_UTF8_BOM.json
│   │   ├── n_structure_lone-invalid-utf-8.json
│   │   ├── n_structure_lone-open-bracket.json
│   │   ├── n_structure_no_data.json
│   │   ├── n_structure_null-byte-outside-string.json
│   │   ├── n_structure_number_with_trailing_garbage.json
│   │   ├── n_structure_object_followed_by_closing_object.json
│   │   ├── n_structure_object_unclosed_no_value.json
│   │   ├── n_structure_object_with_comment.json
│   │   ├── n_structure_object_with_trailing_garbage.json
│   │   ├── n_structure_open_array_apostrophe.json
│   │   ├── n_structure_open_array_comma.json
│   │   ├── n_structure_open_array_object.json.xz
│   │   ├── n_structure_open_array_open_object.json
│   │   ├── n_structure_open_array_open_string.json
│   │   ├── n_structure_open_array_string.json
│   │   ├── n_structure_open_object.json
│   │   ├── n_structure_open_object_close_array.json
│   │   ├── n_structure_open_object_comma.json
│   │   ├── n_structure_open_object_open_array.json
│   │   ├── n_structure_open_object_open_string.json
│   │   ├── n_structure_open_object_string_with_apostrophes.json
│   │   ├── n_structure_open_open.json
│   │   ├── n_structure_single_eacute.json
│   │   ├── n_structure_single_star.json
│   │   ├── n_structure_trailing_#.json
│   │   ├── n_structure_uescaped_LF_before_string.json
│   │   ├── n_structure_unclosed_array.json
│   │   ├── n_structure_unclosed_array_partial_null.json
│   │   ├── n_structure_unclosed_array_unfinished_false.json
│   │   ├── n_structure_unclosed_array_unfinished_true.json
│   │   ├── n_structure_unclosed_object.json
│   │   ├── n_structure_unicode-identifier.json
│   │   ├── n_structure_whitespace_U+2060_word_joiner.json
│   │   ├── n_structure_whitespace_formfeed.json
│   │   ├── y_array_arraysWithSpaces.json
│   │   ├── y_array_empty-string.json
│   │   ├── y_array_empty.json
│   │   ├── y_array_ending_with_newline.json
│   │   ├── y_array_false.json
│   │   ├── y_array_heterogeneous.json
│   │   ├── y_array_null.json
│   │   ├── y_array_with_1_and_newline.json
│   │   ├── y_array_with_leading_space.json
│   │   ├── y_array_with_several_null.json
│   │   ├── y_array_with_trailing_space.json
│   │   ├── y_number.json
│   │   ├── y_number_0e+1.json
│   │   ├── y_number_0e1.json
│   │   ├── y_number_after_space.json
│   │   ├── y_number_double_close_to_zero.json
│   │   ├── y_number_int_with_exp.json
│   │   ├── y_number_minus_zero.json
│   │   ├── y_number_negative_int.json
│   │   ├── y_number_negative_one.json
│   │   ├── y_number_negative_zero.json
│   │   ├── y_number_real_capital_e.json
│   │   ├── y_number_real_capital_e_neg_exp.json
│   │   ├── y_number_real_capital_e_pos_exp.json
│   │   ├── y_number_real_exponent.json
│   │   ├── y_number_real_fraction_exponent.json
│   │   ├── y_number_real_neg_exp.json
│   │   ├── y_number_real_pos_exponent.json
│   │   ├── y_number_simple_int.json
│   │   ├── y_number_simple_real.json
│   │   ├── y_object.json
│   │   ├── y_object_basic.json
│   │   ├── y_object_duplicated_key.json
│   │   ├── y_object_duplicated_key_and_value.json
│   │   ├── y_object_empty.json
│   │   ├── y_object_empty_key.json
│   │   ├── y_object_escaped_null_in_key.json
│   │   ├── y_object_extreme_numbers.json
│   │   ├── y_object_long_strings.json
│   │   ├── y_object_simple.json
│   │   ├── y_object_string_unicode.json
│   │   ├── y_object_with_newlines.json
│   │   ├── y_string_1_2_3_bytes_UTF-8_sequences.json
│   │   ├── y_string_accepted_surrogate_pair.json
│   │   ├── y_string_accepted_surrogate_pairs.json
│   │   ├── y_string_allowed_escapes.json
│   │   ├── y_string_backslash_and_u_escaped_zero.json
│   │   ├── y_string_backslash_doublequotes.json
│   │   ├── y_string_comments.json
│   │   ├── y_string_double_escape_a.json
│   │   ├── y_string_double_escape_n.json
│   │   ├── y_string_escaped_control_character.json
│   │   ├── y_string_escaped_noncharacter.json
│   │   ├── y_string_in_array.json
│   │   ├── y_string_in_array_with_leading_space.json
│   │   ├── y_string_last_surrogates_1_and_2.json
│   │   ├── y_string_nbsp_uescaped.json
│   │   ├── y_string_nonCharacterInUTF-8_U+10FFFF.json
│   │   ├── y_string_nonCharacterInUTF-8_U+FFFF.json
│   │   ├── y_string_null_escape.json
│   │   ├── y_string_one-byte-utf-8.json
│   │   ├── y_string_pi.json
│   │   ├── y_string_reservedCharacterInUTF-8_U+1BFFF.json
│   │   ├── y_string_simple_ascii.json
│   │   ├── y_string_space.json
│   │   ├── y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json
│   │   ├── y_string_three-byte-utf-8.json
│   │   ├── y_string_two-byte-utf-8.json
│   │   ├── y_string_u+2028_line_sep.json
│   │   ├── y_string_u+2029_par_sep.json
│   │   ├── y_string_uEscape.json
│   │   ├── y_string_uescaped_newline.json
│   │   ├── y_string_unescaped_char_delete.json
│   │   ├── y_string_unicode.json
│   │   ├── y_string_unicodeEscapedBackslash.json
│   │   ├── y_string_unicode_2.json
│   │   ├── y_string_unicode_U+10FFFE_nonchar.json
│   │   ├── y_string_unicode_U+1FFFE_nonchar.json
│   │   ├── y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json
│   │   ├── y_string_unicode_U+2064_invisible_plus.json
│   │   ├── y_string_unicode_U+FDD0_nonchar.json
│   │   ├── y_string_unicode_U+FFFE_nonchar.json
│   │   ├── y_string_unicode_escaped_double_quote.json
│   │   ├── y_string_utf8.json
│   │   ├── y_string_with_del_character.json
│   │   ├── y_structure_lonely_false.json
│   │   ├── y_structure_lonely_int.json
│   │   ├── y_structure_lonely_negative_real.json
│   │   ├── y_structure_lonely_null.json
│   │   ├── y_structure_lonely_string.json
│   │   ├── y_structure_lonely_true.json
│   │   ├── y_structure_string_empty.json
│   │   ├── y_structure_trailing_newline.json
│   │   ├── y_structure_true_in_array.json
│   │   └── y_structure_whitespace_array.json
│   ├── roundtrip/
│   │   ├── roundtrip01.json
│   │   ├── roundtrip02.json
│   │   ├── roundtrip03.json
│   │   ├── roundtrip04.json
│   │   ├── roundtrip05.json
│   │   ├── roundtrip06.json
│   │   ├── roundtrip07.json
│   │   ├── roundtrip08.json
│   │   ├── roundtrip09.json
│   │   ├── roundtrip10.json
│   │   ├── roundtrip11.json
│   │   ├── roundtrip12.json
│   │   ├── roundtrip13.json
│   │   ├── roundtrip14.json
│   │   ├── roundtrip15.json
│   │   ├── roundtrip16.json
│   │   ├── roundtrip17.json
│   │   ├── roundtrip18.json
│   │   ├── roundtrip19.json
│   │   ├── roundtrip20.json
│   │   ├── roundtrip21.json
│   │   ├── roundtrip22.json
│   │   ├── roundtrip23.json
│   │   ├── roundtrip24.json
│   │   ├── roundtrip25.json
│   │   ├── roundtrip26.json
│   │   └── roundtrip27.json
│   ├── transform/
│   │   ├── number_1.0.json
│   │   ├── number_1.000000000000000005.json
│   │   ├── number_1000000000000000.json
│   │   ├── number_10000000000000000999.json
│   │   ├── number_1e-999.json
│   │   ├── number_1e6.json
│   │   ├── object_key_nfc_nfd.json
│   │   ├── object_key_nfd_nfc.json
│   │   ├── object_same_key_different_values.json
│   │   ├── object_same_key_same_value.json
│   │   ├── object_same_key_unclear_values.json
│   │   ├── string_1_escaped_invalid_codepoint.json
│   │   ├── string_1_invalid_codepoint.json
│   │   ├── string_2_escaped_invalid_codepoints.json
│   │   ├── string_2_invalid_codepoints.json
│   │   ├── string_3_escaped_invalid_codepoints.json
│   │   ├── string_3_invalid_codepoints.json
│   │   └── string_with_escaped_NULL.json
│   └── twitter.json.xz
├── include/
│   └── yyjson/
│       ├── yyjson.c
│       └── yyjson.h
├── integration/
│   ├── client
│   ├── http
│   ├── init
│   ├── requirements.txt
│   ├── run
│   ├── thread
│   ├── typestubs.py
│   └── wsgi.py
├── pyproject.toml
├── pysrc/
│   └── orjson/
│       ├── __init__.py
│       ├── __init__.pyi
│       └── py.typed
├── requirements-lint.txt
├── requirements.txt
├── script/
│   ├── blame-to-header
│   ├── cargo
│   ├── check-pypi
│   ├── check-version
│   ├── debug
│   ├── develop
│   ├── graph
│   ├── install-fedora
│   ├── lint
│   ├── profile
│   ├── pybench
│   ├── pycorrectness
│   ├── pydataclass
│   ├── pyindent
│   ├── pynonstr
│   ├── pynumpy
│   ├── pysort
│   ├── pytest
│   └── valgrind
├── src/
│   ├── alloc.rs
│   ├── deserialize/
│   │   ├── backend/
│   │   │   ├── ffi.rs
│   │   │   ├── mod.rs
│   │   │   └── yyjson.rs
│   │   ├── cache.rs
│   │   ├── deserializer.rs
│   │   ├── error.rs
│   │   ├── input.rs
│   │   ├── mod.rs
│   │   └── pyobject.rs
│   ├── exception.rs
│   ├── ffi/
│   │   ├── atomiculong.rs
│   │   ├── buffer.rs
│   │   ├── bytes.rs
│   │   ├── compat.rs
│   │   ├── fragment.rs
│   │   ├── mod.rs
│   │   ├── pyboolref.rs
│   │   ├── pybytearrayref.rs
│   │   ├── pybytesref.rs
│   │   ├── pydictref.rs
│   │   ├── pyfloatref.rs
│   │   ├── pyfragmentref.rs
│   │   ├── pyintref.rs
│   │   ├── pylistref.rs
│   │   ├── pymemoryview.rs
│   │   ├── pynoneref.rs
│   │   ├── pystrref/
│   │   │   ├── avx512.rs
│   │   │   ├── mod.rs
│   │   │   ├── object.rs
│   │   │   ├── pyunicode_new.rs
│   │   │   └── scalar.rs
│   │   ├── pytupleref.rs
│   │   ├── pyuuidref.rs
│   │   └── utf8.rs
│   ├── lib.rs
│   ├── opt.rs
│   ├── serialize/
│   │   ├── buffer.rs
│   │   ├── error.rs
│   │   ├── mod.rs
│   │   ├── obtype.rs
│   │   ├── per_type/
│   │   │   ├── dataclass.rs
│   │   │   ├── datetime.rs
│   │   │   ├── datetimelike.rs
│   │   │   ├── default.rs
│   │   │   ├── dict.rs
│   │   │   ├── float.rs
│   │   │   ├── fragment.rs
│   │   │   ├── int.rs
│   │   │   ├── list.rs
│   │   │   ├── mod.rs
│   │   │   ├── none.rs
│   │   │   ├── numpy.rs
│   │   │   ├── pybool.rs
│   │   │   ├── pyenum.rs
│   │   │   ├── unicode.rs
│   │   │   └── uuid.rs
│   │   ├── serializer.rs
│   │   ├── state.rs
│   │   └── writer/
│   │       ├── byteswriter.rs
│   │       ├── formatter.rs
│   │       ├── json.rs
│   │       ├── mod.rs
│   │       ├── num.rs
│   │       └── str/
│   │           ├── avx512.rs
│   │           ├── escape.rs
│   │           ├── generic.rs
│   │           ├── mod.rs
│   │           ├── scalar.rs
│   │           └── sse2.rs
│   ├── typeref.rs
│   └── util.rs
└── test/
    ├── __init__.py
    ├── requirements.txt
    ├── test_api.py
    ├── test_append_newline.py
    ├── test_buffer.py
    ├── test_canonical.py
    ├── test_circular.py
    ├── test_dataclass.py
    ├── test_datetime.py
    ├── test_default.py
    ├── test_dict.py
    ├── test_enum.py
    ├── test_error.py
    ├── test_escape.py
    ├── test_fake.py
    ├── test_fixture.py
    ├── test_fragment.py
    ├── test_indent.py
    ├── test_issue221.py
    ├── test_issue331.py
    ├── test_jsonchecker.py
    ├── test_memory.py
    ├── test_non_str_keys.py
    ├── test_numpy.py
    ├── test_parsing.py
    ├── test_recursion.py
    ├── test_reentrant.py
    ├── test_roundtrip.py
    ├── test_sort_keys.py
    ├── test_subclass.py
    ├── test_transform.py
    ├── test_type.py
    ├── test_typeddict.py
    ├── test_uuid.py
    └── util.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
include/yyjson/* linguist-vendored


================================================
FILE: .github/actions/manylinux/action.yaml
================================================
# SPDX-License-Identifier: MPL-2.0
# Copyright ijl (2024-2025)

name: manylinux

inputs:
  arch:
    required: true
  interpreter:
    required: true
  features:
    required: true
  compatibility:
    required: true

runs:
  using: "composite"
  steps:

    - name: Build and test
      shell: bash
      run: |
        set -eou pipefail

        mkdir dist

        export PYTHON="${{ inputs.interpreter }}"
        if [[ "${PYTHON}" == *t ]]; then
          export PYTHON_PACKAGE="$(echo ${PYTHON} | sed 's/.$//')-freethreading"
        else
          export PYTHON_PACKAGE="${PYTHON}"
        fi

        export TARGET="${{ inputs.arch }}-unknown-linux-gnu"
        export PATH="$PWD/.venv:$HOME/.cargo/bin:$PATH"

        ./script/install-fedora

        source "${VENV}/bin/activate"

        maturin build \
          --release \
          --strip \
          --features="${{ inputs.features }}" \
          --compatibility="${{ inputs.compatibility }}" \
          --interpreter="${PYTHON}" \
          --target="${TARGET}"

        uv pip install ${CARGO_TARGET_DIR}/wheels/orjson*.whl

        export PYTHONMALLOC="debug"
        pytest -v test
        ./integration/run thread
        ./integration/run http
        ./integration/run init

        cp ${CARGO_TARGET_DIR}/wheels/orjson*.whl dist


================================================
FILE: .github/workflows/artifact.yaml
================================================
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
# Copyright ijl (2022-2026), messense (2022), Dominic LoBue (2022)

name: artifact
on: push
env:
  FORCE_COLOR: "1"
  ORJSON_BUILD_FREETHREADED: "1"
  PIP_DISABLE_PIP_VERSION_CHECK: "1"
  RUST_TOOLCHAIN: "nightly-2026-01-28"
  RUST_TOOLCHAIN_STABLE: "1.89"
  UNSAFE_PYO3_BUILD_FREE_THREADED: "1"
  UNSAFE_PYO3_SKIP_VERSION_CHECK: "1"
  UV_LINK_MODE: "copy"
jobs:

  sdist:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    strategy:
      fail-fast: false
    steps:

    - uses: actions/setup-python@v6
      with:
        python-version: "3.14"

    - name: rustup stable
      run: |
        curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain "${RUST_TOOLCHAIN_STABLE}" -y
        rustup default "${RUST_TOOLCHAIN_STABLE}"

    - uses: actions/checkout@v6

    - name: Cargo.toml and pyproject.toml version must match
      run: ./script/check-version

    - run: python3 -m pip install --user --upgrade pip "maturin>=1.10,<2" wheel

    - name: Vendor dependencies
      run: |
        maturin build
        cargo fetch
        mkdir .cargo
        cp ci/sdist.toml .cargo/config.toml
        cargo vendor include/cargo --versioned-dirs

    - run: maturin sdist --out=dist

    - run: python3 -m pip install --user dist/orjson*.tar.gz
      env:
        CARGO_NET_OFFLINE: "true"

    - run: python3 -m pip install --user -r test/requirements.txt -r integration/requirements.txt mypy

    - run: pytest -v test
      env:
        PYTHONMALLOC: "debug"

    - run: ./integration/run thread
    - run: ./integration/run http
    - run: ./integration/run init
    - run: ./integration/run typestubs

    - name: Store sdist
      uses: actions/upload-artifact@v5
      with:
        name: orjson_sdist
        path: dist
        overwrite: true
        retention-days: 1
        if-no-files-found: "error"
        compression-level: 0

  manylinux:
    name: "manylinux_${{ matrix.arch.arch }}_${{ matrix.python.interpreter }}"
    runs-on: "${{ matrix.arch.runner }}"
    container:
      image: fedora:rawhide
    timeout-minutes: 10
    strategy:
      fail-fast: false
      matrix:
        python: [
          { interpreter: 'python3.14', compatibility: "manylinux_2_17", publish: true },
          { interpreter: 'python3.13', compatibility: "manylinux_2_17", publish: true },
          { interpreter: 'python3.12', compatibility: "manylinux_2_17", publish: true },
          { interpreter: 'python3.11', compatibility: "manylinux_2_17", publish: true },
          { interpreter: 'python3.10', compatibility: "manylinux_2_17", publish: true },
        ]
        arch: [
          { runner: "ubuntu-24.04", arch: "x86_64", features: "avx512", },
          { runner: "ubuntu-24.04-arm", arch: "aarch64", features: "generic_simd" },
        ]
    env:
      CARGO_TARGET_DIR: "/tmp/orjson"
      CC: "clang"
      CFLAGS: "-O2 -fstrict-aliasing -fno-plt -emit-llvm"
      LDFLAGS: "-fuse-ld=lld -Wl,-plugin-opt=also-emit-llvm -Wl,--as-needed -Wl,-zrelro,-znow"
      RUSTFLAGS: "-Z unstable-options -C panic=immediate-abort -C linker=clang -C link-arg=-fuse-ld=lld -C linker-plugin-lto -C link-arg=-Wl,-zrelro,-znow -Z mir-opt-level=4 -Z threads=4 -D warnings"
      VENV: ".venv"
    steps:

      - name: CPU info
        run: cat /proc/cpuinfo

      - run: dnf install --setopt=install_weak_deps=false -y git-core

      - uses: actions/checkout@v6

      - name: Build and test
        uses: ./.github/actions/manylinux
        with:
          arch: "${{ matrix.arch.arch }}"
          interpreter: "${{ matrix.python.interpreter }}"
          features: "${{ matrix.arch.features }}"
          compatibility: "${{ matrix.python.compatibility }}"

      - name: Store wheels
        if: matrix.python.publish == true
        uses: actions/upload-artifact@v5
        with:
          name: "orjson_manylinux_${{ matrix.arch.arch }}_${{ matrix.python.interpreter }}_${{ matrix.python.compatibility }}"
          path: dist
          overwrite: true
          retention-days: 1

      - name: Debug
        env:
          CARGO_TARGET_DIR: "/tmp/orjson"
          PYTHON: "${{ matrix.python.interpreter }}"
          TARGET: "${{ matrix.arch.arch }}-unknown-linux-gnu"
        run: |
          export PATH="$PWD/.venv:$HOME/.cargo/bin:$PATH"
          source .venv/bin/activate
          script/debug

  manylinux_cross:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    strategy:
      fail-fast: false
      matrix:
        python: [
          { interpreter: 'python3.14', abi: 'cp314-cp314', manylinux: 'manylinux_2_17', publish: true },
          { interpreter: 'python3.13', abi: 'cp313-cp313', manylinux: 'manylinux_2_17', publish: true },
          { interpreter: 'python3.12', abi: 'cp312-cp312', manylinux: 'manylinux_2_17', publish: true },
          { interpreter: 'python3.11', abi: 'cp311-cp311', manylinux: 'manylinux_2_17', publish: true },
          { interpreter: 'python3.10', abi: 'cp310-cp310', manylinux: 'manylinux_2_17', publish: true },
        ]
        target: [
          {
            arch: 'i686',
            cflags: '-Os -fstrict-aliasing',
            features: 'no_panic',
            rustflags: '-Z unstable-options -C panic=immediate-abort -Z mir-opt-level=4 -D warnings',
            target: 'i686-unknown-linux-gnu',
          },
          {
            arch: 'armv7',
            cflags: '-Os -fstrict-aliasing',
            features: 'no_panic',
            rustflags: '-Z unstable-options -C panic=immediate-abort -Z mir-opt-level=4 -D warnings -C opt-level=s',
            target: 'armv7-unknown-linux-gnueabihf',
          },
          {
            arch: 'ppc64le',
            cflags: '-Os -fstrict-aliasing',
            features: 'generic_simd,no_panic',
            rustflags: '-Z unstable-options -C panic=immediate-abort -Z mir-opt-level=4 -D warnings',
            target: 'powerpc64le-unknown-linux-gnu',
          },
          {
            arch: 's390x',
            cflags: '-Os -fstrict-aliasing -march=z10',
            features: 'no_panic',
            rustflags: '-Z unstable-options -C panic=immediate-abort -Z mir-opt-level=4 -D warnings -C target-cpu=z10',
            target: 's390x-unknown-linux-gnu',
          },
        ]
    steps:
    - uses: actions/checkout@v6

    - name: build-std
      run: |
        mkdir .cargo
        cp ci/config.toml .cargo/config.toml

    - name: Build
      uses: PyO3/maturin-action@v1
      env:
        PYO3_CROSS_LIB_DIR: "/opt/python/${{ matrix.python.abi }}"
        CFLAGS: "${{ matrix.target.cflags }}"
        LDFLAGS: "-Wl,--as-needed"
        RUSTFLAGS: "${{ matrix.target.rustflags }}"
      with:
        target: "${{ matrix.target.target }}"
        rust-toolchain: "${{ env.RUST_TOOLCHAIN }}"
        rustup-components: rust-src
        manylinux: "${{ matrix.python.manylinux }}"
        args: --release --strip --out=dist --features=${{ matrix.target.features }} -i ${{ matrix.python.interpreter }}

    - name: Store wheels
      if: matrix.python.publish == true
      uses: actions/upload-artifact@v5
      with:
        name: "orjson_manylinux_${{ matrix.target.arch }}_${{ matrix.python.interpreter }}"
        path: dist
        overwrite: true
        retention-days: 1
        if-no-files-found: "error"
        compression-level: 0

    - name: setup-qemu-container
      if: "matrix.target.arch == 's390x' || matrix.target.arch == 'ppc64le'"
      uses: sandervocke/setup-qemu-container@v1
      with:
        container: registry.fedoraproject.org/fedora:43
        arch: ${{ matrix.target.arch }}
        podman_args: "-v .:/orjson -v /tmp:/tmp --workdir /orjson"

    - name: setup-shell-wrapper
      uses: sandervocke/setup-shell-wrapper@v1

    - name: Emulated Test
      if: "matrix.target.arch == 's390x' || matrix.target.arch == 'ppc64le'"
      shell: wrap-shell {0}
      env:
        WRAP_SHELL: run-in-container.sh
      run: |
        set -eou pipefail

        dnf install --setopt=install_weak_deps=false -y ${{ matrix.python.interpreter }} python3-uv

        uv venv --python ${{ matrix.python.interpreter }}
        source .venv/bin/activate

        uv pip install -r test/requirements.txt
        uv pip install dist/orjson*.whl

        pytest -v test

  musllinux_amd64:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    strategy:
      fail-fast: false
      matrix:
        python: [
          { version: '3.14', pytest: '1', publish: true },
          { version: '3.13', pytest: '1', publish: true },
          { version: '3.12', pytest: '1', publish: true },
          { version: '3.11', pytest: '0', publish: true },
          { version: '3.10', pytest: '0', publish: true },
        ]
        platform:
          - target: x86_64-unknown-linux-musl
            arch: x86_64
            platform: linux/amd64
            features: avx512,unwind
          - target: i686-unknown-linux-musl
            arch: i686
            platform: linux/386
            features: unwind
    steps:
    - uses: actions/checkout@v6

    - name: build-std
      run: |
        mkdir .cargo
        cp ci/config.toml .cargo/config.toml

    - name: Build
      uses: PyO3/maturin-action@v1
      env:
        CC: "gcc"
        CFLAGS: "-O2"
        LDFLAGS: "-Wl,--as-needed"
        RUSTFLAGS: "-Z unstable-options -C panic=immediate-abort -Z mir-opt-level=4 -Z threads=2 -D warnings -C target-feature=-crt-static"
      with:
        rust-toolchain: "${{ env.RUST_TOOLCHAIN }}"
        rustup-components: rust-src
        target: "${{ matrix.platform.target }}"
        manylinux: musllinux_1_2
        args: --release --strip --out=dist --features=${{ matrix.platform.features }} -i python${{ matrix.python.version }}

    - name: Test
      uses: addnab/docker-run-action@v3
      with:
        image: "quay.io/pypa/musllinux_1_2_${{ matrix.platform.arch }}:2026.01.28-1"
        options: -v ${{ github.workspace }}:/io -w /io
        run: |
          apk add tzdata
          sed -i '/^psutil/d' test/requirements.txt # missing 3.11, 3.12 wheels
          sed -i '/^numpy/d' test/requirements.txt

          python${{ matrix.python.version }} -m venv venv
          venv/bin/pip install -U pip wheel
          venv/bin/pip install orjson --no-index --find-links dist/ --force-reinstall

          # segfault on starting pytest after January 2025 on 3.11 and older; artifact works fine
          if [ ${{ matrix.python.pytest }} == '1' ]; then
            venv/bin/pip install -r test/requirements.txt
            PYTHONMALLOC="debug" venv/bin/python -m pytest -v test
          fi

    - name: Store wheels
      if: matrix.python.publish == true
      uses: actions/upload-artifact@v5
      with:
        name: orjson_musllinux_${{ matrix.platform.arch }}_${{ matrix.python.version }}
        path: dist
        overwrite: true
        retention-days: 1
        if-no-files-found: "error"
        compression-level: 0

  musllinux_aarch64:
    runs-on: ubuntu-24.04-arm
    timeout-minutes: 10
    strategy:
      fail-fast: false
      matrix:
        python: [
          { version: '3.14', publish: true },
          { version: '3.13', publish: true },
          { version: '3.12', publish: true },
          { version: '3.11', publish: true },
          { version: '3.10', publish: true },
        ]
        platform:
          - target: aarch64-unknown-linux-musl
            arch: aarch64
            platform: linux/arm64
            features: generic_simd,no_panic,unwind
          - target: armv7-unknown-linux-musleabihf
            arch: armv7l
            platform: linux/arm/v7
            features: no_panic
    steps:
    - uses: actions/checkout@v6

    - name: build-std
      run: |
        mkdir .cargo
        cp ci/config.toml .cargo/config.toml

    - name: Build
      uses: PyO3/maturin-action@v1
      env:
        CC: "gcc"
        CFLAGS: "-O2"
        LDFLAGS: "-Wl,--as-needed"
        RUSTFLAGS: "-Z unstable-options -C panic=immediate-abort -Z mir-opt-level=4 -Z threads=2 -D warnings -C target-feature=-crt-static"
      with:
        rust-toolchain: "${{ env.RUST_TOOLCHAIN }}"
        rustup-components: rust-src
        target: "${{ matrix.platform.target }}"
        manylinux: musllinux_1_2
        args: --release --strip --out=dist --features=${{ matrix.platform.features }} -i python${{ matrix.python.version }}

    - name: Test
      uses: addnab/docker-run-action@v3
      with:
        image: "quay.io/pypa/musllinux_1_2_${{ matrix.platform.arch }}:2026.01.28-1"
        options: -v ${{ github.workspace }}:/io -w /io
        run: |
          apk add tzdata
          sed -i '/^psutil/d' test/requirements.txt # missing 3.11, 3.12 wheels
          sed -i '/^numpy/d' test/requirements.txt

          python${{ matrix.python.version }} -m venv venv
          venv/bin/pip install -U pip wheel
          venv/bin/pip install -r test/requirements.txt
          venv/bin/pip install orjson --no-index --find-links dist/ --force-reinstall
          export PYTHONMALLOC="debug"
          venv/bin/python -m pytest -v test

    - name: Store wheels
      if: matrix.python.publish == true
      uses: actions/upload-artifact@v5
      with:
        name: orjson_musllinux_${{ matrix.platform.arch }}_${{ matrix.python.version }}
        path: dist
        overwrite: true
        retention-days: 1
        if-no-files-found: "error"
        compression-level: 0

  macos_aarch64:
    runs-on: macos-26
    timeout-minutes: 10
    strategy:
      fail-fast: false
      matrix:
        python: [
          { version: '3.14', macosx_target: "15.0", publish: true },
          { version: '3.13', macosx_target: "15.0", publish: true },
          { version: '3.12', macosx_target: "15.0", publish: true },
          { version: '3.11', macosx_target: "15.0", publish: true },
        ]
    env:
      CC: "clang"
      LDFLAGS: "-Wl,--as-needed"
      CFLAGS: "-O2 -fstrict-aliasing -fno-plt -mcpu=apple-m1 -mtune=generic"
      RUSTFLAGS: "-Z unstable-options -C panic=immediate-abort -Z mir-opt-level=4 -Z threads=3 -D warnings"
      PATH: "/Users/runner/work/orjson/orjson/.venv/bin:/Users/runner/.cargo/bin:/usr/local/opt/curl/bin:/usr/local/bin:/usr/local/sbin:/Users/runner/bin:/Library/Frameworks/Python.framework/Versions/Current/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    steps:

    - name: CPU info
      run: sysctl -a | grep brand

    - uses: actions/checkout@v6

    - uses: actions/setup-python@v6
      with:
        allow-prereleases: true
        python-version: "${{ matrix.python.version }}"

    - uses: dtolnay/rust-toolchain@master
      with:
        toolchain: "${{ env.RUST_TOOLCHAIN }}"
        targets: "aarch64-apple-darwin"
        components: "rust-src"

    - name: Build environment
      run: |
        cargo fetch --target aarch64-apple-darwin &

        export PATH=$HOME/.cargo/bin:$HOME/.local/bin:$PATH

        curl -LsSf https://astral.sh/uv/install.sh | sh
        uv venv --python python${{ matrix.python.version }}
        uv pip install --upgrade "maturin>=1.10,<2" -r test/requirements.txt -r integration/requirements.txt

        mkdir .cargo
        cp ci/config.toml .cargo/config.toml

    - name: maturin
      run: |
        export PATH=$HOME/.cargo/bin:$HOME/.local/bin:$PATH

        MACOSX_DEPLOYMENT_TARGET="${{ matrix.python.macosx_target }}" \
        PYO3_CROSS_LIB_DIR=$(python -c "import sysconfig;print(sysconfig.get_config_var('LIBDIR'))") \
        maturin build \
          --release \
          --strip \
          --features=generic_simd,no_panic \
          --interpreter python${{ matrix.python.version }} \
          --target=aarch64-apple-darwin
        uv pip install target/wheels/orjson*.whl

    - run: pytest -v test
      env:
        PYTHONMALLOC: "debug"

    - run: source .venv/bin/activate && ./integration/run thread
    - run: source .venv/bin/activate && ./integration/run http
    - run: source .venv/bin/activate && ./integration/run init

    - name: Store wheels
      if: matrix.python.publish == true
      uses: actions/upload-artifact@v5
      with:
        name: orjson_macos_aarch64_${{ matrix.python.version }}
        path: target/wheels
        overwrite: true
        retention-days: 1
        if-no-files-found: "error"
        compression-level: 0

  macos_universal2_aarch64:
    runs-on: macos-26
    timeout-minutes: 10
    strategy:
      fail-fast: false
      matrix:
        python: [
          { version: '3.14', macosx_target: "10.15", publish: true },
          { version: '3.13', macosx_target: "10.15", publish: true },
          { version: '3.12', macosx_target: "10.15", publish: true },
          { version: '3.11', macosx_target: "10.15", publish: true },
          { version: '3.10', macosx_target: "10.15", publish: true },
        ]
    env:
      CC: "clang"
      CFLAGS: "-O2 -fstrict-aliasing"
      LDFLAGS: "-Wl,--as-needed"
      CFLAGS_x86_64_apple_darwin: "-O2 -fstrict-aliasing -fno-plt -march=x86-64-v2 -mtune=generic"
      CFLAGS_aarch64_apple_darwin: "-O2 -fstrict-aliasing -fno-plt -mcpu=apple-m1 -mtune=generic"
      RUSTFLAGS: "-Z unstable-options -C panic=immediate-abort -Z mir-opt-level=4 -Z threads=3 -D warnings"
      PATH: "/Users/runner/work/orjson/orjson/.venv/bin:/Users/runner/.cargo/bin:/usr/local/opt/curl/bin:/usr/local/bin:/usr/local/sbin:/Users/runner/bin:/Library/Frameworks/Python.framework/Versions/Current/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    steps:

    - name: CPU info
      run: sysctl -a | grep brand

    - uses: actions/checkout@v6

    - uses: actions/setup-python@v6
      with:
        allow-prereleases: true
        python-version: "${{ matrix.python.version }}"

    - uses: dtolnay/rust-toolchain@master
      with:
        toolchain: "${{ env.RUST_TOOLCHAIN }}"
        targets: "aarch64-apple-darwin, x86_64-apple-darwin"
        components: "rust-src"

    - name: Build environment
      run: |
        cargo fetch --target aarch64-apple-darwin &

        export PATH=$HOME/.cargo/bin:$HOME/.local/bin:$PATH

        curl -LsSf https://astral.sh/uv/install.sh | sh
        uv venv --python python${{ matrix.python.version }}
        uv pip install --upgrade "maturin>=1.10,<2" -r test/requirements.txt -r integration/requirements.txt

        mkdir .cargo
        cp ci/config.toml .cargo/config.toml

    - name: maturin
      run: |
        export PATH=$HOME/.cargo/bin:$HOME/.local/bin:$PATH

        MACOSX_DEPLOYMENT_TARGET="${{ matrix.python.macosx_target }}" \
        PYO3_CROSS_LIB_DIR=$(python -c "import sysconfig;print(sysconfig.get_config_var('LIBDIR'))") \
        maturin build \
          --release \
          --strip \
          --features=generic_simd,no_panic \
          --interpreter python${{ matrix.python.version }} \
          --target=universal2-apple-darwin
        uv pip install target/wheels/orjson*.whl

    - run: pytest -v test
      env:
        PYTHONMALLOC: "debug"

    - run: source .venv/bin/activate && ./integration/run thread
    - run: source .venv/bin/activate && ./integration/run http
    - run: source .venv/bin/activate && ./integration/run init

    - name: Store wheels
      if: matrix.python.publish == true
      uses: actions/upload-artifact@v5
      with:
        name: orjson_universal2_aarch64_${{ matrix.python.version }}
        path: target/wheels
        overwrite: true
        retention-days: 1
        if-no-files-found: "error"
        compression-level: 0

  windows_amd64:
    runs-on: windows-2025
    timeout-minutes: 10
    strategy:
      fail-fast: false
      matrix:
        python: [
          { version: '3.14', publish: true },
          { version: '3.13', publish: true },
          { version: '3.12', publish: true },
          { version: '3.11', publish: true },
          { version: '3.10', publish: true },
        ]
        platform: [
          { arch: "x64", target: "x86_64-pc-windows-msvc", features: "avx512,no_panic" },
          { arch: "x86", target: "i686-pc-windows-msvc", features: "no_panic" },
        ]
    env:
      CFLAGS: "-O2"
      LDFLAGS: "-Wl,--as-needed"
      RUSTFLAGS: "-Z unstable-options -C panic=immediate-abort -Z mir-opt-level=4 -D warnings"
    steps:

    - name: CPU info
      shell: pwsh
      run: Get-WmiObject -Class Win32_Processor -ComputerName. | Select-Object -Property Name, NumberOfCores, NumberOfLogicalProcessors

    - uses: actions/checkout@v6

    - uses: actions/setup-python@v6
      with:
        allow-prereleases: true
        python-version: "${{ matrix.python.version }}"
        architecture: "${{ matrix.platform.arch }}"

    - uses: dtolnay/rust-toolchain@master
      with:
        toolchain: "${{ env.RUST_TOOLCHAIN }}"
        targets: "${{ matrix.platform.target }}"
        components: "rust-src"

    - name: Build environment
      run: |
        cargo fetch --target "${{ matrix.platform.target }}" &

        python.exe -m pip install --upgrade pip "maturin>=1.10,<2" wheel
        python.exe -m pip install -r test\requirements.txt

        mkdir .cargo
        cp ci\config.toml .cargo\config.toml

    - name: maturin
      run: |
        maturin.exe build --release --strip --features="${{ matrix.platform.features }}" --target="${{ matrix.platform.target }}"
        python.exe -m pip install orjson --no-index --find-links target\wheels

    - run: python.exe -m pytest -s -rxX -v test
      env:
        PYTHONMALLOC: "debug"

    - name: Store wheels
      if: matrix.python.publish == true
      uses: actions/upload-artifact@v5
      with:
        name: orjson_windows_amd64_${{ matrix.platform.arch }}_${{ matrix.python.version }}
        path: target\wheels
        overwrite: true
        retention-days: 1
        if-no-files-found: "error"
        compression-level: 0

  windows_aarch64:
    runs-on: windows-11-arm
    timeout-minutes: 10
    strategy:
      fail-fast: false
      matrix:
        python: [
          { version: '3.14', publish: true },
          { version: '3.13', publish: true },
          { version: '3.12', publish: true },
          { version: '3.11', publish: true },
        ]
    env:
      CFLAGS: "-O2"
      LDFLAGS: "-Wl,--as-needed"
      RUSTFLAGS: "-Z unstable-options -C panic=immediate-abort -Z mir-opt-level=4 -D warnings"
      TARGET: "aarch64-pc-windows-msvc"
    steps:

    - name: CPU info
      shell: pwsh
      run: Get-WmiObject -Class Win32_Processor -ComputerName. | Select-Object -Property Name, NumberOfCores, NumberOfLogicalProcessors

    - uses: actions/checkout@v6

    - uses: actions/setup-python@v6
      with:
        allow-prereleases: true
        python-version: "${{ matrix.python.version }}"
        architecture: "arm64"

    # from maturin
    - shell: pwsh
      run: |
        Invoke-WebRequest -Uri "https://static.rust-lang.org/rustup/dist/$env:TARGET/rustup-init.exe" -OutFile rustup-init.exe
        .\rustup-init.exe --default-toolchain "$env:RUST_TOOLCHAIN-$env:TARGET" --profile minimal --component rust-src -y
        "$env:USERPROFILE\.cargo\bin" | Out-File -Append -Encoding ascii $env:GITHUB_PATH
        "CARGO_HOME=$env:USERPROFILE\.cargo" | Out-File -Append -Encoding ascii $env:GITHUB_ENV

    - name: Build environment
      run: |
        cargo fetch --target "$" &

        python.exe -m sysconfig
        python.exe -m pip install --upgrade pip "maturin>=1.10,<2" wheel
        python.exe -m pip install -r test\requirements.txt

        mkdir .cargo
        cp ci\config.toml .cargo\config.toml

    - name: maturin
      run: |
        maturin.exe build --release --strip --features=generic_simd,no_panic --target="$env:TARGET"
        python.exe -m pip install orjson --no-index --find-links target\wheels

    - run: python.exe -m pytest -s -rxX -v test
      env:
        PYTHONMALLOC: "debug"

    - name: Store wheels
      if: matrix.python.publish == true
      uses: actions/upload-artifact@v5
      with:
        name: orjson_windows_aarch64_${{ matrix.python.version }}
        path: target\wheels
        overwrite: true
        retention-days: 1
        if-no-files-found: "error"
        compression-level: 0

  pypi:
    name: PyPI
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    needs: [
      macos_aarch64,
      macos_universal2_aarch64,
      manylinux,
      manylinux_cross,
      musllinux_aarch64,
      musllinux_amd64,
      sdist,
      windows_aarch64,
      windows_amd64,
    ]
    environment:
      name: PyPI
      url: https://pypi.org/p/orjson
    permissions:
      id-token: write
    steps:
      - uses: actions/checkout@v6

      - uses: actions/download-artifact@v5
        with:
          merge-multiple: true
          path: dist/
          pattern: orjson_*

      - run: ls -1 dist/

      - uses: actions/setup-python@v6
        with:
          python-version: "3.14"

      - run: ./script/check-pypi dist

      - name: Publish distribution to PyPI
        if: "startsWith(github.ref, 'refs/tags/')"
        uses: pypa/gh-action-pypi-publish@release/v1
        with:
          attestations: true
          packages-dir: dist
          skip-existing: true
          verbose: true


================================================
FILE: .github/workflows/lint.yaml
================================================
# SPDX-License-Identifier: MPL-2.0
# Copyright ijl (2023-2025)

name: lint
on: push
env:
  FORCE_COLOR: "1"
  PIP_DISABLE_PIP_VERSION_CHECK: "1"
jobs:
  lint:
    runs-on: ubuntu-24.04
    steps:
    - uses: actions/setup-python@v6
      with:
        python-version: "3.14"

    - uses: actions/checkout@v6

    - run: curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain=stable --profile=default -y
    - run: pip install -r requirements-lint.txt

    - run: cargo fmt
    - run: ./script/lint

    - run: git diff --exit-code


================================================
FILE: .github/workflows/unusual.yaml
================================================
# SPDX-License-Identifier: MPL-2.0
# Copyright ijl (2023-2026)

name: unusual
on: push
env:
  FORCE_COLOR: "1"
  PIP_DISABLE_PIP_VERSION_CHECK: "1"
jobs:

  unusual:
    runs-on: ubuntu-24.04
    strategy:
      fail-fast: false
      matrix:
        cfg: [
          { rust: "1.89", python: "3.15", version_check: "1" },
          { rust: "1.89", python: "3.14", version_check: "0" },
          { rust: "1.89", python: "3.10", version_check: "0" },
        ]
    steps:
    - run: curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain ${{ matrix.cfg.rust }} --profile minimal -y

    - uses: actions/setup-python@v5
      with:
        python-version: '${{ matrix.cfg.python }}'
        allow-prereleases: true

    - run: python -m pip install --user --upgrade pip "maturin>=1.10,<2" wheel

    - uses: actions/checkout@v6

    - name: build
      run: |
        PATH="$HOME/.cargo/bin:$PATH" UNSAFE_PYO3_SKIP_VERSION_CHECK="${{ matrix.cfg.version_check }}" \
          maturin build \
          --profile=dev \
          --interpreter python${{ matrix.cfg.python }} \
          --target=x86_64-unknown-linux-gnu

    - run: python -m pip install --user target/wheels/orjson*.whl
    - run: python -m pip install --user -r test/requirements.txt -r integration/requirements.txt

    - run: pytest -s -rxX -v test
      timeout-minutes: 4
      env:
        PYTHONMALLOC: "debug"

    - run: ./integration/run thread
      timeout-minutes: 2

    - run: ./integration/run http
      timeout-minutes: 2

    - run: ./integration/run init
      timeout-minutes: 2


================================================
FILE: .gitignore
================================================
*.patch
/.benchmarks
/.coverage
/.mypy_cache
/.pytest_cache
/.venv*
/build
/include/cargo
/perf.*
/target
/vendor
__pycache__


================================================
FILE: CHANGELOG.md
================================================
# Changelog


## 3.11.7 - 2026-02-02

### Changed

- Use a faster library to serialize `float`. Users with byte-exact regression
tests should note positive exponents are now written using a `+`, e.g.,
`1.2e+30` instead of `1.2e30`. Both formats are spec-compliant.
- ABI compatibility with CPython 3.15 alpha 5 free-threading.


## 3.11.6 - 2026-01-29

### Changed

- orjson now includes code licensed under the Mozilla Public License 2.0 (MPL-2.0).
- Drop support for Python 3.9.
- ABI compatibility with CPython 3.15 alpha 5.
- Build now depends on Rust 1.89 or later instead of 1.85.

### Fixed

- Fix sporadic crash serializing deeply nested `list` of `dict`.


## 3.11.5 - 2025-12-06

### Changed

- Show simple error message instead of traceback when attempting to
build on unsupported Python versions.


## 3.11.4 - 2025-10-24

### Changed

- ABI compatibility with CPython 3.15 alpha 1.
- Publish PyPI wheels for 3.14 and manylinux i686, manylinux arm7,
manylinux ppc64le, manylinux s390x.
- Build now requires a C compiler.


## 3.11.3 - 2025-08-26

### Fixed

- Fix PyPI project metadata when using maturin 1.9.2 or later.


## 3.11.2 - 2025-08-12

### Fixed

- Fix build using Rust 1.89 on amd64.

### Changed

- Build now depends on Rust 1.85 or later instead of 1.82.


## 3.11.1 - 2025-07-25

### Changed

- Publish PyPI wheels for CPython 3.14.

### Fixed

- Fix `str` on big-endian architectures. This was introduced in 3.11.0.


## 3.11.0 - 2025-07-15

### Changed

- Use a deserialization buffer allocated per request instead of a shared
buffer allocated on import.
- ABI compatibility with CPython 3.14 beta 4.


## 3.10.18 - 2025-04-29

### Fixed

- Fix incorrect escaping of the vertical tabulation character. This was
introduced in 3.10.17.


## 3.10.17 - 2025-04-29

### Changed

- Publish PyPI Windows aarch64/arm64 wheels.
- ABI compatibility with CPython 3.14 alpha 7.
- Fix incompatibility running on Python 3.13 using WASM.


## 3.10.16 - 2025-03-24

### Changed

- Improve performance of serialization on amd64 machines with AVX-512.
- ABI compatibility with CPython 3.14 alpha 6.
- Drop support for Python 3.8.
- Publish additional PyPI wheels for macOS that target only aarch64, macOS 15,
and recent Python.


## 3.10.15 - 2025-01-08

### Changed

- Publish PyPI manylinux aarch64 wheels built and tested on aarch64.
- Publish PyPI musllinux aarch64 and arm7l wheels built and tested on aarch64.
- Publish PyPI manylinux Python 3.13 wheels for i686, arm7l, ppc64le, and s390x.


## 3.10.14 - 2024-12-29

### Changed

- Specify build system dependency on `maturin>=1,<2` again.
- Allocate memory using `PyMem_Malloc()` and similar APIs for integration
with pymalloc, mimalloc, and tracemalloc.
- Source distribution does not ship compressed test documents and relevant
tests skip if fixtures are not present.
- Build now depends on Rust 1.82 or later instead of 1.72.


## 3.10.13 - 2024-12-29

### Changed

- Fix compatibility with maturin introducing a breaking change in 1.8.0 and
specify a fixed version of maturin. Projects relying on any previous version
being buildable from source by end users (via PEP 517) must upgrade to at
least this version.


## 3.10.12 - 2024-11-23

### Changed

- Publish PyPI manylinux i686 wheels.
- Publish PyPI musllinux i686 and arm7l wheels.
- Publish PyPI macOS wheels for Python 3.10 or later built on macOS 15.
- Publish PyPI Windows wheels using trusted publishing.


## 3.10.11 - 2024-11-01

### Changed

- Improve performance of UUIDs.
- Publish PyPI wheels with trusted publishing and PEP 740 attestations.
- Include text of licenses for vendored dependencies.


## 3.10.10 - 2024-10-22

### Fixed

- Fix `int` serialization on `s390x`. This was introduced in 3.10.8.

### Changed

- Publish aarch64 manylinux_2_17 wheel for 3.13 to PyPI.


## 3.10.9 - 2024-10-19

### Fixed

- Fix `int` serialization on 32-bit Python 3.8, 3.9, 3.10. This was
introduced in 3.10.8.


## 3.10.8 - 2024-10-19

### Changed

- `int` serialization no longer chains `OverflowError` to the
the `__cause__` attribute of `orjson.JSONEncodeError` when range exceeded.
- Compatibility with CPython 3.14 alpha 1.
- Improve performance.


## 3.10.7 - 2024-08-08

### Changed

- Improve performance of stable Rust amd64 builds.


## 3.10.6 - 2024-07-02

### Changed

- Improve performance.


## 3.10.5 - 2024-06-13

### Changed

- Improve performance.


## 3.10.4 - 2024-06-10

### Changed

- Improve performance.


## 3.10.3 - 2024-05-03

### Changed

- `manylinux` amd64 builds include runtime-detected AVX-512 `str`
implementation.
- Tests now compatible with numpy v2.


## 3.10.2 - 2024-05-01

### Fixed

- Fix crash serializing `str` introduced in 3.10.1.

### Changed

- Improve performance.
- Drop support for arm7.


## 3.10.1 - 2024-04-15

### Fixed

- Serializing `numpy.ndarray` with non-native endianness raises
`orjson.JSONEncodeError`.

### Changed

- Improve performance of serializing.


## 3.10.0 - 2024-03-27

### Changed

- Support serializing `numpy.float16` (`numpy.half`).
- sdist uses metadata 2.3 instead of 2.1.
- Improve Windows PyPI builds.


## 3.9.15 - 2024-02-23

### Fixed

- Implement recursion limit of 1024 on `orjson.loads()`.
- Use byte-exact read on `str` formatting SIMD path to avoid crash.


## 3.9.14 - 2024-02-14

### Fixed

- Fix crash serializing `str` introduced in 3.9.11.

### Changed

- Build now depends on Rust 1.72 or later.


## 3.9.13 - 2024-02-03

### Fixed

- Serialization `str` escape uses only 128-bit SIMD.
- Fix compatibility with CPython 3.13 alpha 3.

### Changed

- Publish `musllinux_1_2` instead of `musllinux_1_1` wheels.
- Serialization uses small integer optimization in CPython 3.12 or later.


## 3.9.12 - 2024-01-18

### Changed

- Update benchmarks in README.

### Fixed

- Minimal `musllinux_1_1` build due to sporadic CI failure.


## 3.9.11 - 2024-01-18

### Changed

- Improve performance of serializing. `str` is significantly faster. Documents
using `dict`, `list`, and `tuple` are somewhat faster.


## 3.9.10 - 2023-10-26

### Fixed

- Fix debug assert failure on 3.12 `--profile=dev` build.


## 3.9.9 - 2023-10-12

### Changed

- `orjson` module metadata explicitly marks subinterpreters as not supported.


## 3.9.8 - 2023-10-10

### Changed

- Improve performance.
- Drop support for Python 3.7.


## 3.9.7 - 2023-09-08

### Fixed

- Fix crash in `orjson.loads()` due to non-reentrant handling of persistent
buffer. This was introduced in 3.9.3.
- Handle some FFI removals in CPython 3.13.


## 3.9.6 - 2023-09-07

### Fixed

- Fix numpy reference leak on unsupported array dtype.
- Fix numpy.datetime64 reference handling.

### Changed

- Minor performance improvements.


## 3.9.5 - 2023-08-16

### Fixed

- Remove futex from module import and initialization path.


## 3.9.4 - 2023-08-07

### Fixed

- Fix hash builder using default values.
- Fix non-release builds of orjson copying large deserialization buffer
from stack to heap. This was introduced in 3.9.3.


## 3.9.3 - 2023-08-06

### Fixed

- Fix compatibility with CPython 3.12.

### Changed

- Support i686/x86 32-bit Python installs on Windows.


## 3.9.2 - 2023-07-07

### Fixed

- Fix the `__cause__` exception on `orjson.JSONEncodeError` possibly being
denormalized, i.e., of type `str` instead of `Exception`.


## 3.9.1 - 2023-06-09

### Fixed

- Fix memory leak on chained tracebacks of exceptions raised in `default`. This
was introduced in 3.8.12.


## 3.9.0 - 2023-06-01

### Added

- `orjson.Fragment` includes already-serialized JSON in a document.


## 3.8.14 - 2023-05-25

### Changed

- PyPI `manylinux` wheels are compiled for `x86-64` instead of `x86-64-v2`.


## 3.8.13 - 2023-05-23

### Changed

- Source distribution contains all source code required for an offline build.
- PyPI macOS wheels use a `MACOSX_DEPLOYMENT_TARGET` of 10.15 instead of 11.
- Build uses maturin v1.


## 3.8.12 - 2023-05-07

### Changed

- Exceptions raised in `default` are now chained as the `__cause__` attribute
on `orjson.JSONEncodeError`.


## 3.8.11 - 2023-04-27

### Changed

- `orjson.loads()` on an empty document has a specific error message.
- PyPI `manylinux_2_28_x86_64` wheels are compiled for `x86-64-v2`.
- PyPI macOS wheels are only `universal2` and compiled for
`x86-64-v2` and `apple-m1`.


## 3.8.10 - 2023-04-09

### Fixed

- Fix compatibility with CPython 3.12.0a7.
- Fix compatibility with big-endian architectures.
- Fix crash in serialization.

### Changed

- Publish musllinux 3.11 wheels.
- Publish s390x wheels.


## 3.8.9 - 2023-03-28

### Fixed

- Fix parallel initialization of orjson.


## 3.8.8 - 2023-03-20

### Changed

- Publish ppc64le wheels.


## 3.8.7 - 2023-02-28

### Fixed

- Use serialization backend introduced in 3.8.4 only on well-tested
platforms such as glibc, macOS by default.


## 3.8.6 - 2023-02-09

### Fixed

- Fix crash serializing when using musl libc.

### Changed

- Make `python-dateutil` optional in tests.
- Handle failure to load system timezones in tests.


## 3.8.5 - 2023-01-10

### Fixed

- Fix `orjson.dumps()` invalid output on Windows.


## 3.8.4 - 2023-01-04

### Changed

- Improve performance.


## 3.8.3 - 2022-12-02

### Fixed

- `orjson.dumps()` accepts `option=None` per `Optional[int]` type.


## 3.8.2 - 2022-11-20

### Fixed

- Fix tests on 32-bit for `numpy.intp` and `numpy.uintp`.

### Changed

- Build now depends on rustc 1.60 or later.
- Support building with maturin 0.13 or 0.14.


## 3.8.1 - 2022-10-25

### Changed

- Build maintenance for Python 3.11.


## 3.8.0 - 2022-08-27

### Changed

- Support serializing `numpy.int16` and `numpy.uint16`.


## 3.7.12 - 2022-08-14

### Fixed

- Fix datetime regression tests for tzinfo 2022b.

### Changed

- Improve performance.


## 3.7.11 - 2022-07-31

### Fixed

- Revert `dict` iterator implementation introduced in 3.7.9.


## 3.7.10 - 2022-07-30

### Fixed

- Fix serializing `dict` with deleted final item. This was introduced in 3.7.9.


## 3.7.9 - 2022-07-29

### Changed

- Improve performance of serializing.
- Improve performance of serializing pretty-printed (`orjson.OPT_INDENT_2`)
to be much nearer to compact.
- Improve performance of deserializing `str` input.
- orjson now requires Rust 1.57 instead of 1.54 to build.


## 3.7.8 - 2022-07-19

### Changed

- Build makes best effort instead of requiring "--features".
- Build using maturin 0.13.


## 3.7.7 - 2022-07-06

### Changed

- Support Python 3.11.


## 3.7.6 - 2022-07-03

### Changed

- Handle unicode changes in CPython 3.12.
- Build PyPI macOS wheels on 10.15 instead of 12 for compatibility.


## 3.7.5 - 2022-06-28

### Fixed

- Fix issue serializing dicts that had keys popped and replaced. This was
introduced in 3.7.4.


## 3.7.4 - 2022-06-28

### Changed

- Improve performance.

### Fixed

- Fix deallocation of `orjson.JSONDecodeError`.


## 3.7.3 - 2022-06-23


## Changed

- Improve build.
- Publish aarch64 musllinux wheels.


## 3.7.2 - 2022-06-07


## Changed

- Improve deserialization performance.


## 3.7.1 - 2022-06-03

### Fixed

- Type stubs for `orjson.JSONDecodeError` now inherit from
`json.JSONDecodeError` instead of `ValueError`
- Null-terminate the internal buffer of `orjson.dumps()` output.


## 3.7.0 - 2022-06-03

### Changed

- Improve deserialization performance significantly through the use of a new
backend. PyPI wheels for manylinux_2_28 and macOS have it enabled. Packagers
are advised to see the README.


## 3.6.9 - 2022-06-01

### Changed

- Improve serialization and deserialization performance.


## 3.6.8 - 2022-04-15

### Fixed

- Fix serialization of `numpy.datetime64("NaT")` to raise on an
unsupported type.


## 3.6.7 - 2022-02-14

### Changed

- Improve performance of deserializing almost-empty documents.
- Publish arm7l `manylinux_2_17` wheels to PyPI.
- Publish amd4 `musllinux_1_1` wheels to PyPI.

### Fixed

- Fix build requiring `python` on `PATH`.


## 3.6.6 - 2022-01-21

### Changed

- Improve performance of serializing `datetime.datetime` using `tzinfo` that
are `zoneinfo.ZoneInfo`.

### Fixed

- Fix invalid indexing in line and column number reporting in
`JSONDecodeError`.
- Fix `orjson.OPT_STRICT_INTEGER` not raising an error on
values exceeding a 64-bit integer maximum.


## 3.6.5 - 2021-12-05

### Fixed

- Fix build on macOS aarch64 CPython 3.10.
- Fix build issue on 32-bit.


## 3.6.4 - 2021-10-01

### Fixed

- Fix serialization of `dataclass` inheriting from `abc.ABC` and
using `__slots__`.
- Decrement refcount for numpy `PyArrayInterface`.
- Fix build on recent versions of Rust nightly.


## 3.6.3 - 2021-08-20

### Fixed

- Fix build on aarch64 using the Rust stable channel.


## 3.6.2 - 2021-08-17

### Changed

- `orjson` now compiles on Rust stable 1.54.0 or above. Use of some SIMD
usage is now disabled by default and packagers are advised to add
`--cargo-extra-args="--features=unstable-simd"` to the `maturin build` command
 if they continue to use nightly.
- `orjson` built with `--features=unstable-simd` adds UTF-8 validation
implementations that use AVX2 or SSE4.2.
- Drop support for Python 3.6.


## 3.6.1 - 2021-08-04

### Changed

- `orjson` now includes a `pyi` type stubs file.
- Publish manylinux_2_24 wheels instead of manylinux2014.

### Fixed

- Fix compilation on latest Rust nightly.


## 3.6.0 - 2021-07-08

### Added

- `orjson.dumps()` serializes `numpy.datetime64` instances as RFC 3339
strings.


## 3.5.4 - 2021-06-30

### Fixed

- Fix memory leak serializing `datetime.datetime` with `tzinfo`.
- Fix wrong error message when serializing an unsupported numpy type
without default specified.

### Changed

- Publish python3.10 and python3.9 manylinux_2_24 wheels.


## 3.5.3 - 2021-06-01

### Fixed

- `orjson.JSONDecodeError` now has `pos`, `lineno`, and `colno`.
- Fix build on recent versions of Rust nightly.


## 3.5.2 - 2021-04-15

### Changed

- Improve serialization and deserialization performance.
- `orjson.dumps()` serializes individual `numpy.bool_` objects.


## 3.5.1 - 2021-03-06

### Changed

- Publish `universal2` wheels for macOS supporting Apple Silicon (aarch64).


## 3.5.0 - 2021-02-24

### Added

- `orjson.loads()` supports reading from `memoryview` objects.

### Fixed

- `datetime.datetime` and `datetime.date` zero pad years less than 1000 to
four digits.
- sdist pins maturin 0.9.0 to avoid breaks in later 0.9.x.

### Changed

- `orjson.dumps()` when given a non-C contiguous `numpy.ndarray` has
an error message suggesting to use `default`.


## 3.4.8 - 2021-02-04

### Fixed

- aarch64 manylinux2014 wheels are now compatible with glibc 2.17.

### Changed

- Fix build warnings on ppcle64.


## 3.4.7 - 2021-01-19

### Changed

- Use vectorcall APIs for method calls on python3.9 and above.
- Publish python3.10 wheels for Linux on amd64 and aarch64.


## 3.4.6 - 2020-12-07

### Fixed

- Fix compatibility with debug builds of CPython.


## 3.4.5 - 2020-12-02

### Fixed

- Fix deserializing long strings on processors without AVX2.


## 3.4.4 - 2020-11-25

### Changed

- `orjson.dumps()` serializes integers up to a 64-bit unsigned integer's
maximum. It was previously the maximum of a 64-bit signed integer.


## 3.4.3 - 2020-10-30

### Fixed

- Fix regression in parsing similar `dict` keys.


## 3.4.2 - 2020-10-29

### Changed

- Improve deserialization performance.
- Publish Windows python3.9 wheel.
- Disable unsupported SIMD features on non-x86, non-ARM targets


## 3.4.1 - 2020-10-20

### Fixed

- Fix `orjson.dumps.__module__` and `orjson.loads.__module__` not being the
`str` "orjson".

### Changed

- Publish macos python3.9 wheel.
- More packaging documentation.


## 3.4.0 - 2020-09-25

### Added

- Serialize `numpy.uint8` and `numpy.int8` instances.

### Fixed

- Fix serializing `numpy.empty()` instances.

### Changed

- No longer publish `manylinux1` wheels due to tooling dropping support.


## 3.3.1 - 2020-08-17

### Fixed

- Fix failure to deserialize some latin1 strings on some platforms. This
was introduced in 3.2.0.
- Fix annotation of optional parameters on `orjson.dumps()` for `help()`.

### Changed

- Publish `manylinux2014` wheels for amd64 in addition to `manylinux1`.


## 3.3.0 - 2020-07-24

### Added

- `orjson.dumps()` now serializes individual numpy floats and integers, e.g.,
`numpy.float64(1.0)`.
- `orjson.OPT_PASSTHROUGH_DATACLASS` causes `orjson.dumps()` to pass
`dataclasses.dataclass` instances to `default`.


## 3.2.2 - 2020-07-13

### Fixed

- Fix serializing `dataclasses.dataclass` that have no attributes.

### Changed

- Improve deserialization performance of `str`.


## 3.2.1 - 2020-07-03

### Fixed

- Fix `orjson.dumps(..., **{})` raising `TypeError` on python3.6.


## 3.2.0 - 2020-06-30

### Added

- `orjson.OPT_APPEND_NEWLINE` appends a newline to output.

### Changed

- Improve deserialization performance of `str`.


## 3.1.2 - 2020-06-23

### Fixed

- Fix serializing zero-dimension `numpy.ndarray`.


## 3.1.1 - 2020-06-20

### Fixed

- Fix repeated serialization of `str` that are ASCII-only and have a legacy
(non-compact) layout.


## 3.1.0 - 2020-06-08

### Added

- `orjson.OPT_PASSTHROUGH_SUBCLASS` causes `orjson.dumps()` to pass
subclasses of builtin types to `default` so the caller can customize the
output.
- `orjson.OPT_PASSTHROUGH_DATETIME` causes `orjson.dumps()` to pass
`datetime` objects to `default` so the caller can customize the
output.


## 3.0.2 - 2020-05-27

### Changed

- `orjson.dumps()` does not serialize `dataclasses.dataclass` attributes
that begin with a leading underscore, e.g., `_attr`. This is because of the
Python idiom that a leading underscores marks an attribute as "private."
- `orjson.dumps()` does not serialize `dataclasses.dataclass` attributes that
are `InitVar` or `ClassVar` whether using `__slots__` or not.


## 3.0.1 - 2020-05-19

### Fixed

- `orjson.dumps()` raises an exception if the object to be serialized
is not given as a positional argument. `orjson.dumps({})` is intended and ok
while `orjson.dumps(obj={})` is an error. This makes it consistent with the
documentation, `help()` annotation, and type annotation.
- Fix orphan reference in exception creation that leaks memory until the
garbage collector runs.

### Changed

- Improve serialization performance marginally by using the fastcall/vectorcall
calling convention on python3.7 and above.
- Reduce build time.


## 3.0.0 - 2020-05-01

### Added

- `orjson.dumps()` serializes subclasses of `str`, `int`, `list`, and `dict`.

### Changed

- `orjson.dumps()` serializes `dataclasses.dataclass` and `uuid.UUID`
instances by default. The options `OPT_SERIALIZE_DATACLASS` and
`OPT_SERIALIZE_UUID` can still be specified but have no effect.


## 2.6.8 - 2020-04-30

### Changed

- The source distribution vendors a forked dependency.


## 2.6.7 - 2020-04-30

### Fixed

- Fix integer overflows in debug builds.

### Changed

- The source distribution sets the recommended RUSTFLAGS in `.cargo/config`.


## 2.6.6 - 2020-04-24

### Fixed

- Import `numpy` only on first use of `OPT_SERIALIZE_NUMPY` to reduce
interpreter start time when not used.
- Reduce build time by half.


## 2.6.5 - 2020-04-08

### Fixed

- Fix deserialization raising `JSONDecodeError` on some valid negative
floats with large exponents.


## 2.6.4 - 2020-04-08

### Changed

- Improve deserialization performance of floats by about 40%.


## 2.6.3 - 2020-04-01

### Changed

- Serialize `enum.Enum` objects.
- Minor performance improvements.


## 2.6.2 - 2020-03-27

### Changed

- Publish python3.9 `manylinux2014` wheel instead of `manylinux1` for `x86_64`.
- Publish python3.9 `manylinux2014` wheel for `aarch64`.

### Fixed

- Fix compilation failure on 32-bit.


## 2.6.1 - 2020-03-19

### Changed

- Serialization is 10-20% faster and uses about 50% less memory by writing
directly to the returned `bytes` object.


## 2.6.0 - 2020-03-10

### Added

- `orjson.dumps()` pretty prints with an indentation of two spaces if
`option=orjson.OPT_INDENT_2` is specified.


## 2.5.2 - 2020-03-07

### Changed

- Publish `manylinux2014` wheels for `aarch64`.
- numpy support now includes `numpy.uint32` and `numpy.uint64`.


## 2.5.1 - 2020-02-24

### Changed

- `manylinux1` wheels for 3.6, 3.7, and 3.8 are now compliant with the spec by
not depending on glibc 2.18.


## 2.5.0 - 2020-02-19

### Added

- `orjson.dumps()` serializes `dict` keys of type other than `str` if
`option=orjson.OPT_NON_STR_KEYS` is specified.


## 2.4.0 - 2020-02-14

### Added

- `orjson.dumps()` serializes `numpy.ndarray` instances if
`option=orjson.OPT_SERIALIZE_NUMPY` is specified.

### Fixed

- Fix `dataclasses.dataclass` attributes that are `dict` to be effected by
`orjson.OPT_SORT_KEYS`.


## 2.3.0 - 2020-02-12

### Added

- `orjson.dumps()` serializes `dict` instances sorted by keys, equivalent to
`sort_keys` in other implementations, if `option=orjson.OPT_SORT_KEYS` is
specified.

### Changed

- `dataclasses.dataclass` instances without `__slots__` now serialize faster.

### Fixed

- Fix documentation on `default`, in particular documenting the need to raise
an exception if the type cannot be handled.


## 2.2.2 - 2020-02-10

### Changed

- Performance improvements to serializing a list containing elements of the
same type.


## 2.2.1 - 2020-02-04

### Fixed

- `orjson.loads()` rejects floats that do not have a digit following
the decimal, e.g., `-2.`, `2.e-3`.

### Changed

- Build Linux, macOS, and Windows wheels on more recent distributions.


## 2.2.0 - 2020-01-22

### Added

- `orjson.dumps()` serializes `uuid.UUID` instances if
`option=orjson.OPT_SERIALIZE_UUID` is specified.

### Changed

- Minor performance improvements.
- Publish Python 3.9 wheel for Linux.


## 2.1.4 - 2020-01-08

### Fixed

- Specify a text signature for `orjson.loads()`.

### Changed

- Improve documentation.


## 2.1.3 - 2019-11-12

### Changed

- Publish Python 3.8 wheels for macOS and Windows.


## 2.1.2 - 2019-11-07

### Changed

- The recursion limit of `default` on `orjson.dumps()` has been increased from
5 to 254.


## 2.1.1 - 2019-10-29

### Changed

- Publish `manylinux1` wheels instead of `manylinux2010`.


## 2.1.0 - 2019-10-24

### Added

- `orjson.dumps()` serializes `dataclasses.dataclass` instances if
`option=orjson.OPT_SERIALIZE_DATACLASS` is specified.
- `orjson.dumps()` accepts `orjson.OPT_UTC_Z` to serialize UTC as "Z" instead
of "+00:00".
- `orjson.dumps()` accepts `orjson.OPT_OMIT_MICROSECONDS` to not serialize
the `microseconds` attribute of `datetime.datetime` and `datetime.time`
instances.
- `orjson.loads()` accepts `bytearray`.

### Changed

- Drop support for Python 3.5.
- Publish `manylinux2010` wheels instead of `manylinux1`.


## 2.0.11 - 2019-10-01

### Changed

- Publish Python 3.8 wheel for Linux.


## 2.0.10 - 2019-09-25

### Changed

- Performance improvements and lower memory usage in deserialization
by creating only one `str` object for repeated map keys.


## 2.0.9 - 2019-09-22

### Changed

- Minor performance improvements.

### Fixed

- Fix inaccurate zero padding in serialization of microseconds on
`datetime.time` objects.


## 2.0.8 - 2019-09-18

### Fixed

- Fix inaccurate zero padding in serialization of microseconds on
`datetime.datetime` objects.


## 2.0.7 - 2019-08-29

### Changed

- Publish PEP 517 source distribution.

### Fixed

- `orjson.dumps()` raises `JSONEncodeError` on circular references.


## 2.0.6 - 2019-05-11

### Changed

- Performance improvements.


## 2.0.5 - 2019-04-19

### Fixed

- Fix inaccuracy in deserializing some `float` values, e.g.,
31.245270191439438 was parsed to 31.24527019143944. Serialization was
unaffected.


## 2.0.4 - 2019-04-02

### Changed

- `orjson.dumps()` now serializes `datetime.datetime` objects without a
`tzinfo` rather than raising `JSONEncodeError`.


## 2.0.3 - 2019-03-23

### Changed

- `orjson.loads()` uses SSE2 to validate `bytes` input.


## 2.0.2 - 2019-03-12

### Changed

- Support Python 3.5.


## 2.0.1 - 2019-02-05

### Changed

- Publish Windows wheel.


## 2.0.0 - 2019-01-28

### Added

- `orjson.dumps()` accepts a `default` callable to serialize arbitrary
types.
- `orjson.dumps()` accepts `datetime.datetime`, `datetime.date`,
and `datetime.time`. Each is serialized to an RFC 3339 string.
- `orjson.dumps(..., option=orjson.OPT_NAIVE_UTC)` allows serializing
`datetime.datetime` objects that do not have a timezone set as UTC.
- `orjson.dumps(..., option=orjson.OPT_STRICT_INTEGER)` available to
raise an error on integer values outside the 53-bit range of all JSON
implementations.

### Changed

- `orjson.dumps()` no longer accepts `bytes`.


## 1.3.1 - 2019-01-03

### Fixed

- Handle invalid UTF-8 in str.


## 1.3.0 - 2019-01-02

### Changed

- Performance improvements of 15-25% on serialization, 10% on deserialization.


## 1.2.1 - 2018-12-31

### Fixed

- Fix memory leak in deserializing dict.


## 1.2.0 - 2018-12-16

### Changed

- Performance improvements.


## 1.1.0 - 2018-12-04

### Changed

- Performance improvements.

### Fixed

- Dict key can only be str.


## 1.0.1 - 2018-11-26

### Fixed

- pyo3 bugfix update.


## 1.0.0 - 2018-11-23

### Added

- `orjson.dumps()` function.
- `orjson.loads()` function.


================================================
FILE: Cargo.toml
================================================
[package]
name = "orjson"
version = "3.11.7"
authors = ["ijl <ijl@mailbox.org>"]
description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy"
repository = "https://github.com/ijl/orjson"
edition = "2024"
resolver = "3"
rust-version = "1.89"
license = "MPL-2.0 AND (Apache-2.0 OR MIT)"
keywords = ["fast", "json", "dataclass", "dataclasses", "datetime", "rfc", "8259", "3339"]
include = [
    "Cargo.toml",
    "CHANGELOG.md",
    "include/yyjson",
    "LICENSE-APACHE",
    "LICENSE-MIT",
    "LICENSE-MPL-2.0",
    "pyproject.toml",
    "README.md",
    "src",
    "test/*.py",
    "test/requirements.txt",
]

[lib]
name = "orjson"
crate-type = ["cdylib"]

[features]
default = []

# Avoid bundling libgcc on musl.
unwind = ["unwinding"]

# Features detected by build.rs. Do not specify.
avx512 = []
cold_path = []
generic_simd = []
inline_int = []
inline_str = []
no_panic = ["zmij/no-panic"]
optimize = []

[dependencies]
associative-cache = { version = "2", default-features = false }
bytes = { version = "1", default-features = false }
bytecount = { version = "^0.6.7", default-features = false, features = ["runtime-dispatch-simd"] }
encoding_rs = { version = "0.8", default-features = false }
half = { version = "2", default-features = false }
itoa = { version = "1", default-features = false }
itoap = { version = "1", default-features = false, features = ["std", "simd"] }
jiff = { version = "^0.2", default-features = false }
once_cell = { version = "1", default-features = false, features = ["alloc", "race"] }
pyo3-ffi = { version = "0.28", default-features = false }
serde = { version = "1", default-features = false }
serde_json = { version = "1", default-features = false, features = ["std"] }
simdutf8 = { version = "0.1", default-features = false, features = ["std", "public_imp", "aarch64_neon"] }
smallvec = { version = "^1.11", default-features = false, features = ["union", "write"] }
unwinding = { version = "=0.2.8", default-features = false, features = ["unwinder"], optional = true }
uuid = { version = "1", default-features = false }
xxhash-rust = { version = "^0.8", default-features = false, features = ["xxh3"] }
zmij = { version = "1", default-features = false }

[build-dependencies]
cc = { version = "1" }
pyo3-build-config = { version = "0.28" }
version_check = { version = "0.9" }

[profile.dev]
codegen-units = 1
debug = 2
debug-assertions = true
incremental = false
lto = "off"
opt-level = 3
overflow-checks = true

[profile.release]
codegen-units = 1
debug = false
incremental = false
lto = "fat"
opt-level = 3
panic = "abort"

[profile.release.build-override]
opt-level = 0


================================================
FILE: LICENSE-APACHE
================================================
                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

	http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


================================================
FILE: LICENSE-MIT
================================================
Permission is hereby granted, free of charge, to any
person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the
Software without restriction, including without
limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software
is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice
shall be included in all copies or substantial portions
of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.


================================================
FILE: LICENSE-MPL-2.0
================================================
Mozilla Public License Version 2.0
==================================

1. Definitions
--------------

1.1. "Contributor"
    means each individual or legal entity that creates, contributes to
    the creation of, or owns Covered Software.

1.2. "Contributor Version"
    means the combination of the Contributions of others (if any) used
    by a Contributor and that particular Contributor's Contribution.

1.3. "Contribution"
    means Covered Software of a particular Contributor.

1.4. "Covered Software"
    means Source Code Form to which the initial Contributor has attached
    the notice in Exhibit A, the Executable Form of such Source Code
    Form, and Modifications of such Source Code Form, in each case
    including portions thereof.

1.5. "Incompatible With Secondary Licenses"
    means

    (a) that the initial Contributor has attached the notice described
        in Exhibit B to the Covered Software; or

    (b) that the Covered Software was made available under the terms of
        version 1.1 or earlier of the License, but not also under the
        terms of a Secondary License.

1.6. "Executable Form"
    means any form of the work other than Source Code Form.

1.7. "Larger Work"
    means a work that combines Covered Software with other material, in 
    a separate file or files, that is not Covered Software.

1.8. "License"
    means this document.

1.9. "Licensable"
    means having the right to grant, to the maximum extent possible,
    whether at the time of the initial grant or subsequently, any and
    all of the rights conveyed by this License.

1.10. "Modifications"
    means any of the following:

    (a) any file in Source Code Form that results from an addition to,
        deletion from, or modification of the contents of Covered
        Software; or

    (b) any new file in Source Code Form that contains any Covered
        Software.

1.11. "Patent Claims" of a Contributor
    means any patent claim(s), including without limitation, method,
    process, and apparatus claims, in any patent Licensable by such
    Contributor that would be infringed, but for the grant of the
    License, by the making, using, selling, offering for sale, having
    made, import, or transfer of either its Contributions or its
    Contributor Version.

1.12. "Secondary License"
    means either the GNU General Public License, Version 2.0, the GNU
    Lesser General Public License, Version 2.1, the GNU Affero General
    Public License, Version 3.0, or any later versions of those
    licenses.

1.13. "Source Code Form"
    means the form of the work preferred for making modifications.

1.14. "You" (or "Your")
    means an individual or a legal entity exercising rights under this
    License. For legal entities, "You" includes any entity that
    controls, is controlled by, or is under common control with You. For
    purposes of this definition, "control" means (a) the power, direct
    or indirect, to cause the direction or management of such entity,
    whether by contract or otherwise, or (b) ownership of more than
    fifty percent (50%) of the outstanding shares or beneficial
    ownership of such entity.

2. License Grants and Conditions
--------------------------------

2.1. Grants

Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:

(a) under intellectual property rights (other than patent or trademark)
    Licensable by such Contributor to use, reproduce, make available,
    modify, display, perform, distribute, and otherwise exploit its
    Contributions, either on an unmodified basis, with Modifications, or
    as part of a Larger Work; and

(b) under Patent Claims of such Contributor to make, use, sell, offer
    for sale, have made, import, and otherwise transfer either its
    Contributions or its Contributor Version.

2.2. Effective Date

The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.

2.3. Limitations on Grant Scope

The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:

(a) for any code that a Contributor has removed from Covered Software;
    or

(b) for infringements caused by: (i) Your and any other third party's
    modifications of Covered Software, or (ii) the combination of its
    Contributions with other software (except as part of its Contributor
    Version); or

(c) under Patent Claims infringed by Covered Software in the absence of
    its Contributions.

This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).

2.4. Subsequent Licenses

No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).

2.5. Representation

Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.

2.6. Fair Use

This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.

2.7. Conditions

Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.

3. Responsibilities
-------------------

3.1. Distribution of Source Form

All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.

3.2. Distribution of Executable Form

If You distribute Covered Software in Executable Form then:

(a) such Covered Software must also be made available in Source Code
    Form, as described in Section 3.1, and You must inform recipients of
    the Executable Form how they can obtain a copy of such Source Code
    Form by reasonable means in a timely manner, at a charge no more
    than the cost of distribution to the recipient; and

(b) You may distribute such Executable Form under the terms of this
    License, or sublicense it under different terms, provided that the
    license for the Executable Form does not attempt to limit or alter
    the recipients' rights in the Source Code Form under this License.

3.3. Distribution of a Larger Work

You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).

3.4. Notices

You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.

3.5. Application of Additional Terms

You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.

4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------

If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.

5. Termination
--------------

5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.

5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.

5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.

************************************************************************
*                                                                      *
*  6. Disclaimer of Warranty                                           *
*  -------------------------                                           *
*                                                                      *
*  Covered Software is provided under this License on an "as is"       *
*  basis, without warranty of any kind, either expressed, implied, or  *
*  statutory, including, without limitation, warranties that the       *
*  Covered Software is free of defects, merchantable, fit for a        *
*  particular purpose or non-infringing. The entire risk as to the     *
*  quality and performance of the Covered Software is with You.        *
*  Should any Covered Software prove defective in any respect, You     *
*  (not any Contributor) assume the cost of any necessary servicing,   *
*  repair, or correction. This disclaimer of warranty constitutes an   *
*  essential part of this License. No use of any Covered Software is   *
*  authorized under this License except under this disclaimer.         *
*                                                                      *
************************************************************************

************************************************************************
*                                                                      *
*  7. Limitation of Liability                                          *
*  --------------------------                                          *
*                                                                      *
*  Under no circumstances and under no legal theory, whether tort      *
*  (including negligence), contract, or otherwise, shall any           *
*  Contributor, or anyone who distributes Covered Software as          *
*  permitted above, be liable to You for any direct, indirect,         *
*  special, incidental, or consequential damages of any character      *
*  including, without limitation, damages for lost profits, loss of    *
*  goodwill, work stoppage, computer failure or malfunction, or any    *
*  and all other commercial damages or losses, even if such party      *
*  shall have been informed of the possibility of such damages. This   *
*  limitation of liability shall not apply to liability for death or   *
*  personal injury resulting from such party's negligence to the       *
*  extent applicable law prohibits such limitation. Some               *
*  jurisdictions do not allow the exclusion or limitation of           *
*  incidental or consequential damages, so this exclusion and          *
*  limitation may not apply to You.                                    *
*                                                                      *
************************************************************************

8. Litigation
-------------

Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.

9. Miscellaneous
----------------

This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.

10. Versions of the License
---------------------------

10.1. New Versions

Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.

10.2. Effect of New Versions

You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.

10.3. Modified Versions

If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).

10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses

If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.

Exhibit A - Source Code Form License Notice
-------------------------------------------

  This Source Code Form is subject to the terms of the Mozilla Public
  License, v. 2.0. If a copy of the MPL was not distributed with this
  file, You can obtain one at https://mozilla.org/MPL/2.0/.

If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.

You may add additional accurate notices of copyright ownership.

Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------

  This Source Code Form is "Incompatible With Secondary Licenses", as
  defined by the Mozilla Public License, v. 2.0.


================================================
FILE: README.md
================================================
# orjson

orjson is a fast, correct JSON library for Python. It
[benchmarks](https://github.com/ijl/orjson?tab=readme-ov-file#performance) as the fastest Python
library for JSON and is more correct than the standard json library or other
third-party libraries. It serializes
[dataclass](https://github.com/ijl/orjson?tab=readme-ov-file#dataclass),
[datetime](https://github.com/ijl/orjson?tab=readme-ov-file#datetime),
[numpy](https://github.com/ijl/orjson?tab=readme-ov-file#numpy), and
[UUID](https://github.com/ijl/orjson?tab=readme-ov-file#uuid) instances natively.

[orjson.dumps()](https://github.com/ijl/orjson?tab=readme-ov-file#serialize) is
something like 10x as fast as `json`, serializes
common types and subtypes, has a `default` parameter for the caller to specify
how to serialize arbitrary types, and has a number of flags controlling output.

[orjson.loads()](https://github.com/ijl/orjson?tab=readme-ov-file#deserialize)
is something like 2x as fast as `json`, and is strictly compliant with UTF-8 and
RFC 8259 ("The JavaScript Object Notation (JSON) Data Interchange Format").

Reading from and writing to files, line-delimited JSON files, and so on is
not provided by the library.

orjson supports CPython 3.10, 3.11, 3.12, 3.13, 3.14, and 3.15.

It distributes amd64/x86_64/x64, i686/x86, aarch64/arm64/armv8, arm7,
ppc64le/POWER8, and s390x wheels for Linux, amd64 and aarch64 wheels
for macOS, and amd64, i686, and aarch64 wheels for Windows.

Wheels published to PyPI for amd64 run on x86-64-v1 (2003)
or later, but will at runtime use AVX-512 if available for a
significant performance benefit; aarch64 wheels run on ARMv8-A (2011) or
later.

orjson does not and will not support PyPy, embedded Python builds for
Android/iOS, or PEP 554 subinterpreters.

orjson may support PEP 703 free-threading when it is stable.

Releases follow semantic versioning and serializing a new object type
without an opt-in flag is considered a breaking change.

orjson contains source code licensed under the Mozilla Public License 2.0,
Apache 2.0, and MIT licenses. The repository from which PyPI artifacts are
published is [github.com/ijl/orjson](https://github.com/ijl/orjson) and an
alternative repository is [codeberg.org/ijl/orjson](https://codeberg.org/ijl/orjson).
There is no open issue tracker or pull requests due to signal-to-noise ratio.
There is a [CHANGELOG](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)
available in the repository.

1. [Usage](https://github.com/ijl/orjson?tab=readme-ov-file#usage)
    1. [Install](https://github.com/ijl/orjson?tab=readme-ov-file#install)
    2. [Quickstart](https://github.com/ijl/orjson?tab=readme-ov-file#quickstart)
    3. [Migrating](https://github.com/ijl/orjson?tab=readme-ov-file#migrating)
    4. [Serialize](https://github.com/ijl/orjson?tab=readme-ov-file#serialize)
        1. [default](https://github.com/ijl/orjson?tab=readme-ov-file#default)
        2. [option](https://github.com/ijl/orjson?tab=readme-ov-file#option)
        3. [Fragment](https://github.com/ijl/orjson?tab=readme-ov-file#fragment)
    5. [Deserialize](https://github.com/ijl/orjson?tab=readme-ov-file#deserialize)
2. [Types](https://github.com/ijl/orjson?tab=readme-ov-file#types)
    1. [dataclass](https://github.com/ijl/orjson?tab=readme-ov-file#dataclass)
    2. [datetime](https://github.com/ijl/orjson?tab=readme-ov-file#datetime)
    3. [enum](https://github.com/ijl/orjson?tab=readme-ov-file#enum)
    4. [float](https://github.com/ijl/orjson?tab=readme-ov-file#float)
    5. [int](https://github.com/ijl/orjson?tab=readme-ov-file#int)
    6. [numpy](https://github.com/ijl/orjson?tab=readme-ov-file#numpy)
    7. [str](https://github.com/ijl/orjson?tab=readme-ov-file#str)
    8. [uuid](https://github.com/ijl/orjson?tab=readme-ov-file#uuid)
3. [Testing](https://github.com/ijl/orjson?tab=readme-ov-file#testing)
4. [Performance](https://github.com/ijl/orjson?tab=readme-ov-file#performance)
    1. [Latency](https://github.com/ijl/orjson?tab=readme-ov-file#latency)
    2. [Reproducing](https://github.com/ijl/orjson?tab=readme-ov-file#reproducing)
5. [Questions](https://github.com/ijl/orjson?tab=readme-ov-file#questions)
6. [Packaging](https://github.com/ijl/orjson?tab=readme-ov-file#packaging)
7. [License](https://github.com/ijl/orjson?tab=readme-ov-file#license)

## Usage

### Install

To install a wheel from PyPI, install the `orjson` package.

In `requirements.in` or `requirements.txt` format, specify:

```txt
orjson >= 3.10,<4
```

In `pyproject.toml` format, specify:

```toml
orjson = "^3.10"
```

To build a wheel, see [packaging](https://github.com/ijl/orjson?tab=readme-ov-file#packaging).

### Quickstart

This is an example of serializing, with options specified, and deserializing:

```python
>>> import orjson, datetime, numpy
>>> data = {
    "type": "job",
    "created_at": datetime.datetime(1970, 1, 1),
    "status": "🆗",
    "payload": numpy.array([[1, 2], [3, 4]]),
}
>>> orjson.dumps(data, option=orjson.OPT_NAIVE_UTC | orjson.OPT_SERIALIZE_NUMPY)
b'{"type":"job","created_at":"1970-01-01T00:00:00+00:00","status":"\xf0\x9f\x86\x97","payload":[[1,2],[3,4]]}'
>>> orjson.loads(_)
{'type': 'job', 'created_at': '1970-01-01T00:00:00+00:00', 'status': '🆗', 'payload': [[1, 2], [3, 4]]}
```

### Migrating

orjson version 3 serializes more types than version 2. Subclasses of `str`,
`int`, `dict`, and `list` are now serialized. This is faster and more similar
to the standard library. It can be disabled with
`orjson.OPT_PASSTHROUGH_SUBCLASS`.`dataclasses.dataclass` instances
are now serialized by default and cannot be customized in a
`default` function unless `option=orjson.OPT_PASSTHROUGH_DATACLASS` is
specified. `uuid.UUID` instances are serialized by default.
For any type that is now serialized,
implementations in a `default` function and options enabling them can be
removed but do not need to be. There was no change in deserialization.

To migrate from the standard library, the largest difference is that
`orjson.dumps` returns `bytes` and `json.dumps` returns a `str`.

Users with `dict` objects using non-`str` keys should specify `option=orjson.OPT_NON_STR_KEYS`.

`sort_keys` is replaced by `option=orjson.OPT_SORT_KEYS`.

`indent` is replaced by `option=orjson.OPT_INDENT_2` and other levels of indentation are not
supported.

`ensure_ascii` is probably not relevant today and UTF-8 characters cannot be
escaped to ASCII.

### Serialize

```python
def dumps(
    __obj: Any,
    default: Optional[Callable[[Any], Any]] = ...,
    option: Optional[int] = ...,
) -> bytes: ...
```

`dumps()` serializes Python objects to JSON.

It natively serializes
`str`, `dict`, `list`, `tuple`, `int`, `float`, `bool`, `None`,
`dataclasses.dataclass`, `typing.TypedDict`, `datetime.datetime`,
`datetime.date`, `datetime.time`, `uuid.UUID`, `numpy.ndarray`, and
`orjson.Fragment` instances. It supports arbitrary types through `default`. It
serializes subclasses of `str`, `int`, `dict`, `list`,
`dataclasses.dataclass`, and `enum.Enum`. It does not serialize subclasses
of `tuple` to avoid serializing `namedtuple` objects as arrays. To avoid
serializing subclasses, specify the option `orjson.OPT_PASSTHROUGH_SUBCLASS`.

The output is a `bytes` object containing UTF-8.

The global interpreter lock (GIL) is held for the duration of the call.

It raises `JSONEncodeError` on an unsupported type. This exception message
describes the invalid object with the error message
`Type is not JSON serializable: ...`. To fix this, specify
[default](https://github.com/ijl/orjson?tab=readme-ov-file#default).

It raises `JSONEncodeError` on a `str` that contains invalid UTF-8.

It raises `JSONEncodeError` on an integer that exceeds 64 bits by default or,
with `OPT_STRICT_INTEGER`, 53 bits.

It raises `JSONEncodeError` if a `dict` has a key of a type other than `str`,
unless `OPT_NON_STR_KEYS` is specified.

It raises `JSONEncodeError` if the output of `default` recurses to handling by
`default` more than 254 levels deep.

It raises `JSONEncodeError` on circular references.

It raises `JSONEncodeError`  if a `tzinfo` on a datetime object is
unsupported.

`JSONEncodeError` is a subclass of `TypeError`. This is for compatibility
with the standard library.

If the failure was caused by an exception in `default` then
`JSONEncodeError` chains the original exception as `__cause__`.

#### default

To serialize a subclass or arbitrary types, specify `default` as a
callable that returns a supported type. `default` may be a function,
lambda, or callable class instance. To specify that a type was not
handled by `default`, raise an exception such as `TypeError`.

```python
>>> import orjson, decimal
>>>
def default(obj):
    if isinstance(obj, decimal.Decimal):
        return str(obj)
    raise TypeError

>>> orjson.dumps(decimal.Decimal("0.0842389659712649442845"))
JSONEncodeError: Type is not JSON serializable: decimal.Decimal
>>> orjson.dumps(decimal.Decimal("0.0842389659712649442845"), default=default)
b'"0.0842389659712649442845"'
>>> orjson.dumps({1, 2}, default=default)
orjson.JSONEncodeError: Type is not JSON serializable: set
```

The `default` callable may return an object that itself
must be handled by `default` up to 254 times before an exception
is raised.

It is important that `default` raise an exception if a type cannot be handled.
Python otherwise implicitly returns `None`, which appears to the caller
like a legitimate value and is serialized:

```python
>>> import orjson, json
>>>
def default(obj):
    if isinstance(obj, decimal.Decimal):
        return str(obj)

>>> orjson.dumps({"set":{1, 2}}, default=default)
b'{"set":null}'
>>> json.dumps({"set":{1, 2}}, default=default)
'{"set":null}'
```

#### option

To modify how data is serialized, specify `option`. Each `option` is an integer
constant in `orjson`. To specify multiple options, mask them together, e.g.,
`option=orjson.OPT_STRICT_INTEGER | orjson.OPT_NAIVE_UTC`.

##### OPT_APPEND_NEWLINE

Append `\n` to the output. This is a convenience and optimization for the
pattern of `dumps(...) + "\n"`. `bytes` objects are immutable and this
pattern copies the original contents.

```python
>>> import orjson
>>> orjson.dumps([])
b"[]"
>>> orjson.dumps([], option=orjson.OPT_APPEND_NEWLINE)
b"[]\n"
```

##### OPT_INDENT_2

Pretty-print output with an indent of two spaces. This is equivalent to
`indent=2` in the standard library. Pretty printing is slower and the output
larger. This option is compatible with all other options.

```python
>>> import orjson
>>> orjson.dumps({"a": "b", "c": {"d": True}, "e": [1, 2]})
b'{"a":"b","c":{"d":true},"e":[1,2]}'
>>> orjson.dumps(
    {"a": "b", "c": {"d": True}, "e": [1, 2]},
    option=orjson.OPT_INDENT_2
)
b'{\n  "a": "b",\n  "c": {\n    "d": true\n  },\n  "e": [\n    1,\n    2\n  ]\n}'
```

If displayed, the indentation and linebreaks appear like this:

```json
{
  "a": "b",
  "c": {
    "d": true
  },
  "e": [
    1,
    2
  ]
}
```

This measures serializing the github.json fixture as compact (52KiB) or
pretty (64KiB):

| Library   |   compact (ms) |   pretty (ms) |   vs. orjson |
|-----------|----------------|---------------|--------------|
| orjson    |           0.01 |          0.02 |            1 |
| json      |           0.13 |          0.54 |           34 |

This measures serializing the citm_catalog.json fixture, more of a worst
case due to the amount of nesting and newlines, as compact (489KiB) or
pretty (1.1MiB):

| Library   |   compact (ms) |   pretty (ms) |   vs. orjson |
|-----------|----------------|---------------|--------------|
| orjson    |           0.25 |          0.45 |          1   |
| json      |           3.01 |         24.42 |         54.4 |

This can be reproduced using the `pyindent` script.

##### OPT_NAIVE_UTC

Serialize `datetime.datetime` objects without a `tzinfo` as UTC. This
has no effect on `datetime.datetime` objects that have `tzinfo` set.

```python
>>> import orjson, datetime
>>> orjson.dumps(
        datetime.datetime(1970, 1, 1, 0, 0, 0),
    )
b'"1970-01-01T00:00:00"'
>>> orjson.dumps(
        datetime.datetime(1970, 1, 1, 0, 0, 0),
        option=orjson.OPT_NAIVE_UTC,
    )
b'"1970-01-01T00:00:00+00:00"'
```

##### OPT_NON_STR_KEYS

Serialize `dict` keys of type other than `str`. This allows `dict` keys
to be one of `str`, `int`, `float`, `bool`, `None`, `datetime.datetime`,
`datetime.date`, `datetime.time`, `enum.Enum`, and `uuid.UUID`. For comparison,
the standard library serializes `str`, `int`, `float`, `bool` or `None` by
default. orjson benchmarks as being faster at serializing non-`str` keys
than other libraries. This option is slower for `str` keys than the default.

```python
>>> import orjson, datetime, uuid
>>> orjson.dumps(
        {uuid.UUID("7202d115-7ff3-4c81-a7c1-2a1f067b1ece"): [1, 2, 3]},
        option=orjson.OPT_NON_STR_KEYS,
    )
b'{"7202d115-7ff3-4c81-a7c1-2a1f067b1ece":[1,2,3]}'
>>> orjson.dumps(
        {datetime.datetime(1970, 1, 1, 0, 0, 0): [1, 2, 3]},
        option=orjson.OPT_NON_STR_KEYS | orjson.OPT_NAIVE_UTC,
    )
b'{"1970-01-01T00:00:00+00:00":[1,2,3]}'
```

These types are generally serialized how they would be as
values, e.g., `datetime.datetime` is still an RFC 3339 string and respects
options affecting it. The exception is that `int` serialization does not
respect `OPT_STRICT_INTEGER`.

This option has the risk of creating duplicate keys. This is because non-`str`
objects may serialize to the same `str` as an existing key, e.g.,
`{"1": true, 1: false}`. The last key to be inserted to the `dict` will be
serialized last and a JSON deserializer will presumably take the last
occurrence of a key (in the above, `false`). The first value will be lost.

This option is compatible with `orjson.OPT_SORT_KEYS`. If sorting is used,
note the sort is unstable and will be unpredictable for duplicate keys.

```python
>>> import orjson, datetime
>>> orjson.dumps(
    {"other": 1, datetime.date(1970, 1, 5): 2, datetime.date(1970, 1, 3): 3},
    option=orjson.OPT_NON_STR_KEYS | orjson.OPT_SORT_KEYS
)
b'{"1970-01-03":3,"1970-01-05":2,"other":1}'
```

This measures serializing 589KiB of JSON comprising a `list` of 100 `dict`
in which each `dict` has both 365 randomly-sorted `int` keys representing epoch
timestamps as well as one `str` key and the value for each key is a
single integer. In "str keys", the keys were converted to `str` before
serialization, and orjson still specifes `option=orjson.OPT_NON_STR_KEYS`
(which is always somewhat slower).

| Library   |   str keys (ms) |   int keys (ms) | int keys sorted (ms)   |
|-----------|-----------------|-----------------|------------------------|
| orjson    |            0.5  |            0.93 | 2.08                   |
| json      |            2.72 |            3.59 |                        |

json is blank because it
raises `TypeError` on attempting to sort before converting all keys to `str`.
This can be reproduced using the `pynonstr` script.

##### OPT_OMIT_MICROSECONDS

Do not serialize the `microsecond` field on `datetime.datetime` and
`datetime.time` instances.

```python
>>> import orjson, datetime
>>> orjson.dumps(
        datetime.datetime(1970, 1, 1, 0, 0, 0, 1),
    )
b'"1970-01-01T00:00:00.000001"'
>>> orjson.dumps(
        datetime.datetime(1970, 1, 1, 0, 0, 0, 1),
        option=orjson.OPT_OMIT_MICROSECONDS,
    )
b'"1970-01-01T00:00:00"'
```

##### OPT_PASSTHROUGH_DATACLASS

Passthrough `dataclasses.dataclass` instances to `default`. This allows
customizing their output but is much slower.


```python
>>> import orjson, dataclasses
>>>
@dataclasses.dataclass
class User:
    id: str
    name: str
    password: str

def default(obj):
    if isinstance(obj, User):
        return {"id": obj.id, "name": obj.name}
    raise TypeError

>>> orjson.dumps(User("3b1", "asd", "zxc"))
b'{"id":"3b1","name":"asd","password":"zxc"}'
>>> orjson.dumps(User("3b1", "asd", "zxc"), option=orjson.OPT_PASSTHROUGH_DATACLASS)
TypeError: Type is not JSON serializable: User
>>> orjson.dumps(
        User("3b1", "asd", "zxc"),
        option=orjson.OPT_PASSTHROUGH_DATACLASS,
        default=default,
    )
b'{"id":"3b1","name":"asd"}'
```

##### OPT_PASSTHROUGH_DATETIME

Passthrough `datetime.datetime`, `datetime.date`, and `datetime.time` instances
to `default`. This allows serializing datetimes to a custom format, e.g.,
HTTP dates:

```python
>>> import orjson, datetime
>>>
def default(obj):
    if isinstance(obj, datetime.datetime):
        return obj.strftime("%a, %d %b %Y %H:%M:%S GMT")
    raise TypeError

>>> orjson.dumps({"created_at": datetime.datetime(1970, 1, 1)})
b'{"created_at":"1970-01-01T00:00:00"}'
>>> orjson.dumps({"created_at": datetime.datetime(1970, 1, 1)}, option=orjson.OPT_PASSTHROUGH_DATETIME)
TypeError: Type is not JSON serializable: datetime.datetime
>>> orjson.dumps(
        {"created_at": datetime.datetime(1970, 1, 1)},
        option=orjson.OPT_PASSTHROUGH_DATETIME,
        default=default,
    )
b'{"created_at":"Thu, 01 Jan 1970 00:00:00 GMT"}'
```

This does not affect datetimes in `dict` keys if using OPT_NON_STR_KEYS.

##### OPT_PASSTHROUGH_SUBCLASS

Passthrough subclasses of builtin types to `default`.

```python
>>> import orjson
>>>
class Secret(str):
    pass

def default(obj):
    if isinstance(obj, Secret):
        return "******"
    raise TypeError

>>> orjson.dumps(Secret("zxc"))
b'"zxc"'
>>> orjson.dumps(Secret("zxc"), option=orjson.OPT_PASSTHROUGH_SUBCLASS)
TypeError: Type is not JSON serializable: Secret
>>> orjson.dumps(Secret("zxc"), option=orjson.OPT_PASSTHROUGH_SUBCLASS, default=default)
b'"******"'
```

This does not affect serializing subclasses as `dict` keys if using
OPT_NON_STR_KEYS.

##### OPT_SERIALIZE_DATACLASS

This is deprecated and has no effect in version 3. In version 2 this was
required to serialize  `dataclasses.dataclass` instances. For more, see
[dataclass](https://github.com/ijl/orjson?tab=readme-ov-file#dataclass).

##### OPT_SERIALIZE_NUMPY

Serialize `numpy.ndarray` instances. For more, see
[numpy](https://github.com/ijl/orjson?tab=readme-ov-file#numpy).

##### OPT_SERIALIZE_UUID

This is deprecated and has no effect in version 3. In version 2 this was
required to serialize `uuid.UUID` instances. For more, see
[UUID](https://github.com/ijl/orjson?tab=readme-ov-file#UUID).

##### OPT_SORT_KEYS

Serialize `dict` keys in sorted order. The default is to serialize in an
unspecified order. This is equivalent to `sort_keys=True` in the standard
library.

This can be used to ensure the order is deterministic for hashing or tests.
It has a substantial performance penalty and is not recommended in general.

```python
>>> import orjson
>>> orjson.dumps({"b": 1, "c": 2, "a": 3})
b'{"b":1,"c":2,"a":3}'
>>> orjson.dumps({"b": 1, "c": 2, "a": 3}, option=orjson.OPT_SORT_KEYS)
b'{"a":3,"b":1,"c":2}'
```

This measures serializing the twitter.json fixture unsorted and sorted:

| Library   |   unsorted (ms) |   sorted (ms) |   vs. orjson |
|-----------|-----------------|---------------|--------------|
| orjson    |            0.11 |          0.3  |          1   |
| json      |            1.36 |          1.93 |          6.4 |

The benchmark can be reproduced using the `pysort` script.

The sorting is not collation/locale-aware:

```python
>>> import orjson
>>> orjson.dumps({"a": 1, "ä": 2, "A": 3}, option=orjson.OPT_SORT_KEYS)
b'{"A":3,"a":1,"\xc3\xa4":2}'
```

This is the same sorting behavior as the standard library.

`dataclass` also serialize as maps but this has no effect on them.

##### OPT_STRICT_INTEGER

Enforce 53-bit limit on integers. The limit is otherwise 64 bits, the same as
the Python standard library. For more, see [int](https://github.com/ijl/orjson?tab=readme-ov-file#int).

##### OPT_UTC_Z

Serialize a UTC timezone on `datetime.datetime` instances as `Z` instead
of `+00:00`.

```python
>>> import orjson, datetime, zoneinfo
>>> orjson.dumps(
        datetime.datetime(1970, 1, 1, 0, 0, 0, tzinfo=zoneinfo.ZoneInfo("UTC")),
    )
b'"1970-01-01T00:00:00+00:00"'
>>> orjson.dumps(
        datetime.datetime(1970, 1, 1, 0, 0, 0, tzinfo=zoneinfo.ZoneInfo("UTC")),
        option=orjson.OPT_UTC_Z
    )
b'"1970-01-01T00:00:00Z"'
```

#### Fragment

`orjson.Fragment` includes already-serialized JSON in a document. This is an
efficient way to include JSON blobs from a cache, JSONB field, or separately
serialized object without first deserializing to Python objects via `loads()`.

```python
>>> import orjson
>>> orjson.dumps({"key": "zxc", "data": orjson.Fragment(b'{"a": "b", "c": 1}')})
b'{"key":"zxc","data":{"a": "b", "c": 1}}'
```

It does no reformatting: `orjson.OPT_INDENT_2` will not affect a
compact blob nor will a pretty-printed JSON blob be rewritten as compact.

The input must be `bytes` or `str` and given as a positional argument.

This raises `orjson.JSONEncodeError` if a `str` is given and the input is
not valid UTF-8. It otherwise does no validation and it is possible to
write invalid JSON. This does not escape characters. The implementation is
tested to not crash if given invalid strings or invalid JSON.

### Deserialize

```python
def loads(__obj: Union[bytes, bytearray, memoryview, str]) -> Any: ...
```

`loads()` deserializes JSON to Python objects. It deserializes to `dict`,
`list`, `int`, `float`, `str`, `bool`, and `None` objects.

`bytes`, `bytearray`, `memoryview`, and `str` input are accepted. If the input
exists as a `memoryview`, `bytearray`, or `bytes` object, it is recommended to
pass these directly rather than creating an unnecessary `str` object. That is,
`orjson.loads(b"{}")` instead of `orjson.loads(b"{}".decode("utf-8"))`. This
has lower memory usage and lower latency.

The input must be valid UTF-8.

orjson maintains a cache of map keys for the duration of the process. This
causes a net reduction in memory usage by avoiding duplicate strings. The
keys must be at most 64 bytes to be cached and 2048 entries are stored.

The global interpreter lock (GIL) is held for the duration of the call.

It raises `JSONDecodeError` if given an invalid type or invalid
JSON. This includes if the input contains `NaN`, `Infinity`, or `-Infinity`,
which the standard library allows, but is not valid JSON.

It raises `JSONDecodeError` if a combination of array or object recurses
1024 levels deep.

It raises `JSONDecodeError` if unable to allocate a buffer large enough
to parse the document.

`JSONDecodeError` is a subclass of `json.JSONDecodeError` and `ValueError`.
This is for compatibility with the standard library.

## Types

### dataclass

orjson serializes instances of `dataclasses.dataclass` natively. It serializes
instances 40-50x as fast as other libraries and avoids a severe slowdown seen
in other libraries compared to serializing `dict`.

It is supported to pass all variants of dataclasses, including dataclasses
using `__slots__`, frozen dataclasses, those with optional or default
attributes, and subclasses. There is a performance benefit to not
using `__slots__`.

| Library   |   dict (ms) |   dataclass (ms) |   vs. orjson |
|-----------|-------------|------------------|--------------|
| orjson    |        0.43 |             0.95 |            1 |
| json      |        5.81 |            38.32 |           40 |

This measures serializing 555KiB of JSON, orjson natively and other libraries
using `default` to serialize the output of `dataclasses.asdict()`. This can be
reproduced using the `pydataclass` script.

Dataclasses are serialized as maps, with every attribute serialized and in
the order given on class definition:

```python
>>> import dataclasses, orjson, typing

@dataclasses.dataclass
class Member:
    id: int
    active: bool = dataclasses.field(default=False)

@dataclasses.dataclass
class Object:
    id: int
    name: str
    members: typing.List[Member]

>>> orjson.dumps(Object(1, "a", [Member(1, True), Member(2)]))
b'{"id":1,"name":"a","members":[{"id":1,"active":true},{"id":2,"active":false}]}'
```

### datetime

orjson serializes `datetime.datetime` objects to
[RFC 3339](https://tools.ietf.org/html/rfc3339) format,
e.g., "1970-01-01T00:00:00+00:00". This is a subset of ISO 8601 and is
compatible with `isoformat()` in the standard library.

```python
>>> import orjson, datetime, zoneinfo
>>> orjson.dumps(
    datetime.datetime(2018, 12, 1, 2, 3, 4, 9, tzinfo=zoneinfo.ZoneInfo("Australia/Adelaide"))
)
b'"2018-12-01T02:03:04.000009+10:30"'
>>> orjson.dumps(
    datetime.datetime(2100, 9, 1, 21, 55, 2).replace(tzinfo=zoneinfo.ZoneInfo("UTC"))
)
b'"2100-09-01T21:55:02+00:00"'
>>> orjson.dumps(
    datetime.datetime(2100, 9, 1, 21, 55, 2)
)
b'"2100-09-01T21:55:02"'
```

`datetime.datetime` supports instances with a `tzinfo` that is `None`,
`datetime.timezone.utc`, a timezone instance from the standard library `zoneinfo`
module, or a timezone instance from the third-party `pendulum`, `pytz`, or
`dateutil`/`arrow` libraries.

It is fastest to use the standard library's `zoneinfo.ZoneInfo` for timezones.

`datetime.time` objects must not have a `tzinfo`.

```python
>>> import orjson, datetime
>>> orjson.dumps(datetime.time(12, 0, 15, 290))
b'"12:00:15.000290"'
```

`datetime.date` objects will always serialize.

```python
>>> import orjson, datetime
>>> orjson.dumps(datetime.date(1900, 1, 2))
b'"1900-01-02"'
```

Errors with `tzinfo` result in `JSONEncodeError` being raised.

To disable serialization of `datetime` objects specify the option
`orjson.OPT_PASSTHROUGH_DATETIME`.

To use "Z" suffix instead of "+00:00" to indicate UTC ("Zulu") time, use the option
`orjson.OPT_UTC_Z`.

To assume datetimes without timezone are UTC, use the option `orjson.OPT_NAIVE_UTC`.

### enum

orjson serializes enums natively. Options apply to their values.

```python
>>> import enum, datetime, orjson
>>>
class DatetimeEnum(enum.Enum):
    EPOCH = datetime.datetime(1970, 1, 1, 0, 0, 0)
>>> orjson.dumps(DatetimeEnum.EPOCH)
b'"1970-01-01T00:00:00"'
>>> orjson.dumps(DatetimeEnum.EPOCH, option=orjson.OPT_NAIVE_UTC)
b'"1970-01-01T00:00:00+00:00"'
```

Enums with members that are not supported types can be serialized using
`default`:

```python
>>> import enum, orjson
>>>
class Custom:
    def __init__(self, val):
        self.val = val

def default(obj):
    if isinstance(obj, Custom):
        return obj.val
    raise TypeError

class CustomEnum(enum.Enum):
    ONE = Custom(1)

>>> orjson.dumps(CustomEnum.ONE, default=default)
b'1'
```

### float

orjson serializes and deserializes double precision floats with no loss of
precision and consistent rounding.

`orjson.dumps()` serializes Nan, Infinity, and -Infinity, which are not
compliant JSON, as `null`:

```python
>>> import orjson, json
>>> orjson.dumps([float("NaN"), float("Infinity"), float("-Infinity")])
b'[null,null,null]'
>>> json.dumps([float("NaN"), float("Infinity"), float("-Infinity")])
'[NaN, Infinity, -Infinity]'
```

### int

orjson serializes and deserializes 64-bit integers by default. The range
supported is a signed 64-bit integer's minimum (-9223372036854775807) to
an unsigned 64-bit integer's maximum (18446744073709551615). This
is widely compatible, but there are implementations
that only support 53-bits for integers, e.g.,
web browsers. For those implementations, `dumps()` can be configured to
raise a `JSONEncodeError` on values exceeding the 53-bit range.

```python
>>> import orjson
>>> orjson.dumps(9007199254740992)
b'9007199254740992'
>>> orjson.dumps(9007199254740992, option=orjson.OPT_STRICT_INTEGER)
JSONEncodeError: Integer exceeds 53-bit range
>>> orjson.dumps(-9007199254740992, option=orjson.OPT_STRICT_INTEGER)
JSONEncodeError: Integer exceeds 53-bit range
```

### numpy

orjson natively serializes `numpy.ndarray` and individual
`numpy.float64`, `numpy.float32`, `numpy.float16` (`numpy.half`),
`numpy.int64`, `numpy.int32`, `numpy.int16`, `numpy.int8`,
`numpy.uint64`, `numpy.uint32`, `numpy.uint16`, `numpy.uint8`,
`numpy.uintp`, `numpy.intp`, `numpy.datetime64`, and `numpy.bool`
instances.

orjson is compatible with both numpy v1 and v2.

orjson is faster than all compared libraries at serializing
numpy instances. Serializing numpy data requires specifying
`option=orjson.OPT_SERIALIZE_NUMPY`.

```python
>>> import orjson, numpy
>>> orjson.dumps(
        numpy.array([[1, 2, 3], [4, 5, 6]]),
        option=orjson.OPT_SERIALIZE_NUMPY,
)
b'[[1,2,3],[4,5,6]]'
```

The array must be a contiguous C array (`C_CONTIGUOUS`) and one of the
supported datatypes.

Note a difference between serializing `numpy.float32` using `ndarray.tolist()`
or `orjson.dumps(..., option=orjson.OPT_SERIALIZE_NUMPY)`: `tolist()` converts
to a `double` before serializing and orjson's native path does not. This
can result in different rounding.

`numpy.datetime64` instances are serialized as RFC 3339 strings and
datetime options affect them.

```python
>>> import orjson, numpy
>>> orjson.dumps(
        numpy.datetime64("2021-01-01T00:00:00.172"),
        option=orjson.OPT_SERIALIZE_NUMPY,
)
b'"2021-01-01T00:00:00.172000"'
>>> orjson.dumps(
        numpy.datetime64("2021-01-01T00:00:00.172"),
        option=(
            orjson.OPT_SERIALIZE_NUMPY |
            orjson.OPT_NAIVE_UTC |
            orjson.OPT_OMIT_MICROSECONDS
        ),
)
b'"2021-01-01T00:00:00+00:00"'
```

If an array is not a contiguous C array, contains an unsupported datatype,
or contains a `numpy.datetime64` using an unsupported representation
(e.g., picoseconds), orjson falls through to `default`. In `default`,
`obj.tolist()` can be specified.

If an array is not in the native endianness, e.g., an array of big-endian values
on a little-endian system, `orjson.JSONEncodeError`  is raised.

If an array is malformed, `orjson.JSONEncodeError` is raised.

This measures serializing 92MiB of JSON from an `numpy.ndarray` with
dimensions of `(50000, 100)` and `numpy.float64` values:

| Library   | Latency (ms)   |   RSS diff (MiB) |   vs. orjson |
|-----------|----------------|------------------|--------------|
| orjson    | 105            |              105 |          1   |
| json      | 1,481          |              295 |         14.2 |

This measures serializing 100MiB of JSON from an `numpy.ndarray` with
dimensions of `(100000, 100)` and `numpy.int32` values:

| Library   |   Latency (ms) |   RSS diff (MiB) |   vs. orjson |
|-----------|----------------|------------------|--------------|
| orjson    |             68 |              119 |          1   |
| json      |            684 |              501 |         10.1 |

This measures serializing 105MiB of JSON from an `numpy.ndarray` with
dimensions of `(100000, 200)` and `numpy.bool` values:

| Library   |   Latency (ms) |   RSS diff (MiB) |   vs. orjson |
|-----------|----------------|------------------|--------------|
| orjson    |             50 |              125 |          1   |
| json      |            573 |              398 |         11.5 |

In these benchmarks, orjson serializes natively and `json` serializes
`ndarray.tolist()` via `default`. The RSS column measures peak memory
usage during serialization. This can be reproduced using the `pynumpy` script.

orjson does not have an installation or compilation dependency on numpy. The
implementation is independent, reading `numpy.ndarray` using
`PyArrayInterface`.

### str

orjson is strict about UTF-8 conformance. This is stricter than the standard
library's json module, which will serialize and deserialize UTF-16 surrogates,
e.g., "\ud800", that are invalid UTF-8.

If `orjson.dumps()` is given a `str` that does not contain valid UTF-8,
`orjson.JSONEncodeError` is raised. If `loads()` receives invalid UTF-8,
`orjson.JSONDecodeError` is raised.

```python
>>> import orjson, json
>>> orjson.dumps('\ud800')
JSONEncodeError: str is not valid UTF-8: surrogates not allowed
>>> json.dumps('\ud800')
'"\\ud800"'
>>> orjson.loads('"\\ud800"')
JSONDecodeError: unexpected end of hex escape at line 1 column 8: line 1 column 1 (char 0)
>>> json.loads('"\\ud800"')
'\ud800'
```

To make a best effort at deserializing bad input, first decode `bytes` using
the `replace` or `lossy` argument for `errors`:

```python
>>> import orjson
>>> orjson.loads(b'"\xed\xa0\x80"')
JSONDecodeError: str is not valid UTF-8: surrogates not allowed
>>> orjson.loads(b'"\xed\xa0\x80"'.decode("utf-8", "replace"))
'���'
```

### uuid

orjson serializes `uuid.UUID` instances to
[RFC 4122](https://tools.ietf.org/html/rfc4122) format, e.g.,
"f81d4fae-7dec-11d0-a765-00a0c91e6bf6".

``` python
>>> import orjson, uuid
>>> orjson.dumps(uuid.uuid5(uuid.NAMESPACE_DNS, "python.org"))
b'"886313e1-3b8a-5372-9b90-0c9aee199e5d"'
```

## Testing

The library has comprehensive tests. There are tests against fixtures in the
[JSONTestSuite](https://github.com/nst/JSONTestSuite) and
[nativejson-benchmark](https://github.com/miloyip/nativejson-benchmark)
repositories. It is tested to not crash against the
[Big List of Naughty Strings](https://github.com/minimaxir/big-list-of-naughty-strings).
It is tested to not leak memory. It is tested to not crash
against and not accept invalid UTF-8. There are integration tests
exercising the library's use in web servers (gunicorn using multiprocess/forked
workers) and when multithreaded.

orjson is the most correct of the compared libraries. This graph shows how each
library handles a combined 342 JSON fixtures from the
[JSONTestSuite](https://github.com/nst/JSONTestSuite) and
[nativejson-benchmark](https://github.com/miloyip/nativejson-benchmark) tests:

| Library    |   Invalid JSON documents not rejected |   Valid JSON documents not deserialized |
|------------|---------------------------------------|-----------------------------------------|
| orjson     |                                     0 |                                       0 |
| json       |                                    17 |                                       0 |

This shows that all libraries deserialize valid JSON but only orjson
correctly rejects the given invalid JSON fixtures. Errors are largely due to
accepting invalid strings and numbers.

The graph above can be reproduced using the `pycorrectness` script.

## Performance

Serialization and deserialization performance of orjson is consistently better
than the standard library's `json`. The graphs below illustrate a few commonly
used documents.

### Latency

![Serialization](doc/serialization.png)

![Deserialization](doc/deserialization.png)

#### twitter.json serialization

| Library   |   Median latency (milliseconds) |   Operations per second |   Relative (latency) |
|-----------|---------------------------------|-------------------------|----------------------|
| orjson    |                             0.1 |                    8453 |                  1   |
| json      |                             1.3 |                     765 |                 11.1 |

#### twitter.json deserialization

| Library   |   Median latency (milliseconds) |   Operations per second |   Relative (latency) |
|-----------|---------------------------------|-------------------------|----------------------|
| orjson    |                             0.5 |                    1889 |                  1   |
| json      |                             2.2 |                     453 |                  4.2 |

#### github.json serialization

| Library   |   Median latency (milliseconds) |   Operations per second |   Relative (latency) |
|-----------|---------------------------------|-------------------------|----------------------|
| orjson    |                            0.01 |                  103693 |                  1   |
| json      |                            0.13 |                    7648 |                 13.6 |

#### github.json deserialization

| Library   |   Median latency (milliseconds) |   Operations per second |   Relative (latency) |
|-----------|---------------------------------|-------------------------|----------------------|
| orjson    |                            0.04 |                   23264 |                  1   |
| json      |                            0.1  |                   10430 |                  2.2 |

#### citm_catalog.json serialization

| Library   |   Median latency (milliseconds) |   Operations per second |   Relative (latency) |
|-----------|---------------------------------|-------------------------|----------------------|
| orjson    |                             0.3 |                    3975 |                  1   |
| json      |                             3   |                     338 |                 11.8 |

#### citm_catalog.json deserialization

| Library   |   Median latency (milliseconds) |   Operations per second |   Relative (latency) |
|-----------|---------------------------------|-------------------------|----------------------|
| orjson    |                             1.3 |                     781 |                  1   |
| json      |                             4   |                     250 |                  3.1 |

#### canada.json serialization

| Library   |   Median latency (milliseconds) |   Operations per second |   Relative (latency) |
|-----------|---------------------------------|-------------------------|----------------------|
| orjson    |                             2.5 |                     399 |                  1   |
| json      |                            29.8 |                      33 |                 11.9 |

#### canada.json deserialization

| Library   |   Median latency (milliseconds) |   Operations per second |   Relative (latency) |
|-----------|---------------------------------|-------------------------|----------------------|
| orjson    |                               3 |                     333 |                    1 |
| json      |                              18 |                      55 |                    6 |

### Reproducing

The above was measured using Python 3.11.10 in a Fedora 42 container on an
x86-64-v4 machine using the
`orjson-3.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl`
artifact on PyPI. The latency results can be reproduced using the `pybench` script.

## Questions

### Will it deserialize to dataclasses, UUIDs, decimals, etc or support object_hook?

No. This requires a schema specifying what types are expected and how to
handle errors etc. This is addressed by data validation libraries a
level above this.

### Will it serialize to `str`?

No. `bytes` is the correct type for a serialized blob.

### Will it support NDJSON or JSONL?

No. [orjsonl](https://github.com/umarbutler/orjsonl) may be appropriate.

### Will it support JSON5 or RJSON?

No, it supports RFC 8259.

### How do I depend on orjson in a Rust project?

orjson is only shipped as a Python module. The project should depend on
`orjson` in its own Python requirements and should obtain pointers to
functions and objects using the normal `PyImport_*` APIs.

## Packaging

To package orjson requires at least [Rust](https://www.rust-lang.org/) 1.89,
a C compiler, and the [maturin](https://github.com/PyO3/maturin) build tool.
The recommended build command is:

```sh
maturin build --release --strip
```

The project's own CI tests against `nightly-2026-01-28` and stable 1.89. It
is prudent to pin the nightly version because that channel can introduce
breaking changes. There is a significant performance benefit to using
nightly.

orjson is tested on native hardware for amd64, aarch64, and i686 on Linux. It is
cross-compiled and may be tested via emulation for arm7, ppc64le, and s390x. It
is tested for aarch64 on macOS and cross-compiles for amd64. For
Windows it is tested on amd64, i686, and aarch64.

There are no runtime dependencies other than libc.

The source distribution on PyPI contains all dependencies' source and can be
built without network access. The file can be downloaded from
`https://files.pythonhosted.org/packages/source/o/orjson/orjson-${version}.tar.gz`.

orjson's tests are included in the source distribution on PyPI. The tests
require only `pytest`. There are optional packages such as `pytz` and `numpy`
listed in `test/requirements.txt` and used in ~10% of tests. Not having these
dependencies causes the tests needing them to skip. Tests can be run
with `pytest -q test`.

## License

orjson was written by ijl <<ijl@mailbox.org>>, copyright 2018 - 2026, with
some source files available under the Mozilla Public License 2.0 and some
available under your choice of the Apache 2 license or MIT license.


================================================
FILE: bench/__init__.py
================================================


================================================
FILE: bench/benchmark_dumps.py
================================================
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
# Copyright ijl (2020-2026), Aarni Koskela (2021)

from json import loads as json_loads

import pytest

from .data import FIXTURE_AS_OBJECTS, FIXTURE_NAMES, LIBRARIES


@pytest.mark.parametrize("library", LIBRARIES)
@pytest.mark.parametrize("fixture", FIXTURE_NAMES)
def test_dumps(benchmark, fixture, library):
    dumper, _ = LIBRARIES[library]
    benchmark.group = f"{fixture} serialization"
    benchmark.extra_info["lib"] = library
    data = FIXTURE_AS_OBJECTS[fixture]
    benchmark.extra_info["correct"] = json_loads(dumper(data)) == data  # type: ignore
    benchmark(dumper, data)


================================================
FILE: bench/benchmark_loads.py
================================================
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
# Copyright ijl (2020-2026), Aarni Koskela (2021)

from json import loads as json_loads

import pytest

from .data import FIXTURE_AS_BYTES, FIXTURE_NAMES, LIBRARIES


@pytest.mark.parametrize("fixture", FIXTURE_NAMES)
@pytest.mark.parametrize("library", LIBRARIES)
def test_loads(benchmark, fixture, library):
    dumper, loader = LIBRARIES[library]
    benchmark.group = f"{fixture} deserialization"
    benchmark.extra_info["lib"] = library
    data = FIXTURE_AS_BYTES[fixture]
    correct = json_loads(dumper(loader(data))) == json_loads(data)  # type: ignore
    benchmark.extra_info["correct"] = correct
    benchmark(loader, data)


================================================
FILE: bench/data.py
================================================
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
# Copyright ijl (2019-2026), Aarni Koskela (2021)

import gc
from json import dumps as _json_dumps
from json import loads as json_loads

from orjson import dumps as orjson_dumps
from orjson import loads as orjson_loads

from .util import read_fixture


def json_dumps(obj):
    return _json_dumps(obj).encode("utf-8")


LIBRARIES = {
    "orjson": (orjson_dumps, orjson_loads),
    "json": (json_dumps, json_loads),
}


FIXTURE_NAMES = (
    "canada.json",
    "citm_catalog.json",
    "github.json",
    "twitter.json",
)

FIXTURE_AS_BYTES = {name: read_fixture(f"{name}.xz") for name in FIXTURE_NAMES}

FIXTURE_AS_OBJECTS = {
    name: orjson_loads(FIXTURE_AS_BYTES[name]) for name in FIXTURE_NAMES
}


if hasattr(gc, "freeze"):
    gc.freeze()
if hasattr(gc, "collect"):
    gc.collect()
if hasattr(gc, "disable"):
    gc.disable()


================================================
FILE: bench/requirements.txt
================================================
memory-profiler; python_version<"3.15" and implementation_name=="cpython"
pandas; python_version<"3.15" and implementation_name=="cpython"
pytest-benchmark
pytest-random-order
seaborn; python_version<"3.15" and implementation_name=="cpython"
tabulate


================================================
FILE: bench/run_func
================================================
#!/usr/bin/env python3
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
# Copyright ijl (2018-2025), Aarni Koskela (2021)

import sys
import lzma
import os
import gc

if hasattr(os, "sched_setaffinity"):
    os.sched_setaffinity(os.getpid(), {0, 1})

from orjson import dumps, loads

filename = sys.argv[1]
n = int(sys.argv[3]) if len(sys.argv) >= 4 else 1000

with lzma.open(filename, "r") as fileh:
    file_bytes = fileh.read()

if hasattr(gc, "freeze"):
    gc.freeze()
if hasattr(gc, "collect"):
    gc.collect()
if hasattr(gc, "disable"):
    gc.disable()

if sys.argv[2] == "dumps":
    file_obj = loads(file_bytes)
    for _ in range(n):
        _ = dumps(file_obj)
elif sys.argv[2] == "loads":
    for _ in range(n):
        _ = loads(file_bytes)


================================================
FILE: bench/util.py
================================================
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
# Copyright ijl (2018-2022), Aarni Koskela (2021)

import lzma
import os
from pathlib import Path

dirname = os.path.join(os.path.dirname(__file__), "../data")

if hasattr(os, "sched_setaffinity"):
    os.sched_setaffinity(os.getpid(), {0, 1})


def read_fixture(filename: str) -> bytes:
    path = Path(dirname, filename)
    if path.suffix == ".xz":
        contents = lzma.decompress(path.read_bytes())
    else:
        contents = path.read_bytes()
    return contents


================================================
FILE: build.rs
================================================
// SPDX-License-Identifier: MPL-2.0
// Copyright ijl (2021-2026)

fn main() {
    let python_config = pyo3_build_config::get();

    if python_config.is_free_threaded() && std::env::var("ORJSON_BUILD_FREETHREADED").is_err() {
        not_supported("free-threaded Python")
    }

    #[allow(unused_variables)]
    let is_64_bit_python = matches!(python_config.pointer_width, Some(64));

    match python_config.implementation {
        pyo3_build_config::PythonImplementation::CPython => {
            println!("cargo:rustc-cfg=CPython");
            #[cfg(any(target_arch = "x86_64", target_arch = "aarch64"))]
            if is_64_bit_python {
                println!("cargo:rustc-cfg=feature=\"inline_int\"");
                #[cfg(target_endian = "little")]
                println!("cargo:rustc-cfg=feature=\"inline_str\"");
            }
        }
        pyo3_build_config::PythonImplementation::GraalPy => not_supported("GraalPy"),
        pyo3_build_config::PythonImplementation::PyPy => not_supported("PyPy"),
    }

    for cfg in python_config.build_script_outputs() {
        println!("{cfg}");
    }

    println!("cargo:rerun-if-changed=build.rs");
    println!("cargo:rerun-if-changed=include/yyjson/*");
    println!("cargo:rerun-if-env-changed=CC");
    println!("cargo:rerun-if-env-changed=CFLAGS");
    println!("cargo:rerun-if-env-changed=LDFLAGS");
    println!("cargo:rerun-if-env-changed=ORJSON_BUILD_FREETHREADED");
    println!("cargo:rerun-if-env-changed=RUSTFLAGS");
    println!("cargo:rustc-check-cfg=cfg(cold_path)");
    println!("cargo:rustc-check-cfg=cfg(CPython)");
    println!("cargo:rustc-check-cfg=cfg(GraalPy)");
    println!("cargo:rustc-check-cfg=cfg(optimize)");
    println!("cargo:rustc-check-cfg=cfg(Py_3_10)");
    println!("cargo:rustc-check-cfg=cfg(Py_3_11)");
    println!("cargo:rustc-check-cfg=cfg(Py_3_12)");
    println!("cargo:rustc-check-cfg=cfg(Py_3_13)");
    println!("cargo:rustc-check-cfg=cfg(Py_3_14)");
    println!("cargo:rustc-check-cfg=cfg(Py_3_15)");
    println!("cargo:rustc-check-cfg=cfg(Py_GIL_DISABLED)");
    println!("cargo:rustc-check-cfg=cfg(PyPy)");

    #[cfg(all(target_arch = "x86_64", not(target_os = "macos")))]
    if is_64_bit_python {
        println!("cargo:rustc-cfg=feature=\"avx512\"");
    }

    #[cfg(target_arch = "aarch64")]
    if version_check::supports_feature("portable_simd").unwrap_or(false) {
        println!("cargo:rustc-cfg=feature=\"generic_simd\"");
    }

    if version_check::supports_feature("cold_path").unwrap_or(false) {
        println!("cargo:rustc-cfg=feature=\"cold_path\"");
    }

    if version_check::supports_feature("optimize_attribute").unwrap_or(false) {
        println!("cargo:rustc-cfg=feature=\"optimize\"");
    }

    cc::Build::new()
        .file("include/yyjson/yyjson.c")
        .include("include/yyjson")
        .define("YYJSON_DISABLE_NON_STANDARD", "1")
        .define("YYJSON_DISABLE_UTF8_VALIDATION", "1")
        .define("YYJSON_DISABLE_UTILS", "1")
        .define("YYJSON_DISABLE_WRITER", "1")
        .compile("yyjson")
}

fn not_supported(flavor: &str) {
    let version = env!("CARGO_PKG_VERSION");
    eprintln!("\n\n\norjson v{version} does not support {flavor}\n\n\n");
    std::process::exit(1);
}


================================================
FILE: ci/config.toml
================================================
[unstable]
build-std = ["core", "std", "alloc", "proc_macro", "panic_abort"]
trim-paths = true

[target.x86_64-apple-darwin]
linker = "clang"
rustflags = ["-C", "target-cpu=x86-64-v2", "-Z", "tune-cpu=generic"]

[target.aarch64-apple-darwin]
linker = "clang"
rustflags = ["-C", "target-cpu=apple-m1", "-Z", "tune-cpu=generic"]


================================================
FILE: ci/sdist.toml
================================================
[source.crates-io]
replace-with = "vendored-sources"

[source.vendored-sources]
directory = "include/cargo"


================================================
FILE: data/jsonchecker/fail01.json
================================================
"A JSON payload should be an object or array, not a string."

================================================
FILE: data/jsonchecker/fail02.json
================================================
["Unclosed array"

================================================
FILE: data/jsonchecker/fail03.json
================================================
{unquoted_key: "keys must be quoted"}

================================================
FILE: data/jsonchecker/fail04.json
================================================
["extra comma",]

================================================
FILE: data/jsonchecker/fail05.json
================================================
["double extra comma",,]

================================================
FILE: data/jsonchecker/fail06.json
================================================
[   , "<-- missing value"]

================================================
FILE: data/jsonchecker/fail07.json
================================================
["Comma after the close"],

================================================
FILE: data/jsonchecker/fail08.json
================================================
["Extra close"]]

================================================
FILE: data/jsonchecker/fail09.json
================================================
{"Extra comma": true,}

================================================
FILE: data/jsonchecker/fail10.json
================================================
{"Extra value after close": true} "misplaced quoted value"

================================================
FILE: data/jsonchecker/fail11.json
================================================
{"Illegal expression": 1 + 2}

================================================
FILE: data/jsonchecker/fail12.json
================================================
{"Illegal invocation": alert()}

================================================
FILE: data/jsonchecker/fail13.json
================================================
{"Numbers cannot have leading zeroes": 013}

================================================
FILE: data/jsonchecker/fail14.json
================================================
{"Numbers cannot be hex": 0x14}

================================================
FILE: data/jsonchecker/fail15.json
================================================
["Illegal backslash escape: \x15"]

================================================
FILE: data/jsonchecker/fail16.json
================================================
[\naked]

================================================
FILE: data/jsonchecker/fail17.json
================================================
["Illegal backslash escape: \017"]

================================================
FILE: data/jsonchecker/fail18.json
================================================
[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]

================================================
FILE: data/jsonchecker/fail19.json
================================================
{"Missing colon" null}

================================================
FILE: data/jsonchecker/fail20.json
================================================
{"Double colon":: null}

================================================
FILE: data/jsonchecker/fail21.json
================================================
{"Comma instead of colon", null}

================================================
FILE: data/jsonchecker/fail22.json
================================================
["Colon instead of comma": false]

================================================
FILE: data/jsonchecker/fail23.json
================================================
["Bad value", truth]

================================================
FILE: data/jsonchecker/fail24.json
================================================
['single quote']

================================================
FILE: data/jsonchecker/fail25.json
================================================
["	tab	character	in	string	"]

================================================
FILE: data/jsonchecker/fail26.json
================================================
["tab\   character\   in\  string\  "]

================================================
FILE: data/jsonchecker/fail27.json
================================================
["line
break"]

================================================
FILE: data/jsonchecker/fail28.json
================================================
["line\
break"]

================================================
FILE: data/jsonchecker/fail29.json
================================================
[0e]

================================================
FILE: data/jsonchecker/fail30.json
================================================
[0e+]

================================================
FILE: data/jsonchecker/fail31.json
================================================
[0e+-1]

================================================
FILE: data/jsonchecker/fail32.json
================================================
{"Comma instead if closing brace": true,

================================================
FILE: data/jsonchecker/fail33.json
================================================
["mismatch"}

================================================
FILE: data/jsonchecker/pass01.json
================================================
[
    "JSON Test Pattern pass1",
    {"object with 1 member":["array with 1 element"]},
    {},
    [],
    -42,
    true,
    false,
    null,
    {
        "integer": 1234567890,
        "real": -9876.543210,
        "e": 0.123456789e-12,
        "E": 1.234567890E+34,
        "":  23456789012E66,
        "zero": 0,
        "one": 1,
        "space": " ",
        "quote": "\"",
        "backslash": "\\",
        "controls": "\b\f\n\r\t",
        "slash": "/ & \/",
        "alpha": "abcdefghijklmnopqrstuvwyz",
        "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
        "digit": "0123456789",
        "0123456789": "digit",
        "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
        "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
        "true": true,
        "false": false,
        "null": null,
        "array":[  ],
        "object":{  },
        "address": "50 St. James Street",
        "url": "http://www.JSON.org/",
        "comment": "// /* <!-- --",
        "# -- --> */": " ",
        " s p a c e d " :[1,2 , 3

,

4 , 5        ,          6           ,7        ],"compact":[1,2,3,4,5,6,7],
        "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
        "quotes": "&#34; \u0022 %22 0x22 034 &#x22;",
        "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
: "A key can be any string"
    },
    0.5 ,98.6
,
99.44
,

1066,
1e1,
0.1e1,
1e-1,
1e00,2e+00,2e-00
,"rosebud"]

================================================
FILE: data/jsonchecker/pass02.json
================================================
[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]

================================================
FILE: data/jsonchecker/pass03.json
================================================
{
    "JSON Test Pattern pass3": {
        "The outermost value": "must be an object or array.",
        "In this test": "It is an object."
    }
}


================================================
FILE: data/parsing/i_number_double_huge_neg_exp.json
================================================
[123.456e-789]

================================================
FILE: data/parsing/i_number_huge_exp.json
================================================
[0.4e00669999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999969999999006]

================================================
FILE: data/parsing/i_number_neg_int_huge_exp.json
================================================
[-1e+9999]

================================================
FILE: data/parsing/i_number_pos_double_huge_exp.json
================================================
[1.5e+9999]

================================================
FILE: data/parsing/i_number_real_neg_overflow.json
================================================
[-123123e100000]

================================================
FILE: data/parsing/i_number_real_pos_overflow.json
================================================
[123123e100000]

================================================
FILE: data/parsing/i_number_real_underflow.json
================================================
[123e-10000000]

================================================
FILE: data/parsing/i_number_too_big_neg_int.json
================================================
[-123123123123123123123123123123]

================================================
FILE: data/parsing/i_number_too_big_pos_int.json
================================================
[100000000000000000000]

================================================
FILE: data/parsing/i_number_very_big_negative_int.json
================================================
[-237462374673276894279832749832423479823246327846]

================================================
FILE: data/parsing/i_object_key_lone_2nd_surrogate.json
================================================
{"\uDFAA":0}

================================================
FILE: data/parsing/i_string_1st_surrogate_but_2nd_missing.json
================================================
["\uDADA"]

================================================
FILE: data/parsing/i_string_1st_valid_surrogate_2nd_invalid.json
================================================
["\uD888\u1234"]

================================================
FILE: data/parsing/i_string_UTF-8_invalid_sequence.json
================================================
["日ш"]

================================================
FILE: data/parsing/i_string_UTF8_surrogate_U+D800.json
================================================
[""]

================================================
FILE: data/parsing/i_string_incomplete_surrogate_and_escape_valid.json
================================================
["\uD800\n"]

================================================
FILE: data/parsing/i_string_incomplete_surrogate_pair.json
================================================
["\uDd1ea"]

================================================
FILE: data/parsing/i_string_incomplete_surrogates_escape_valid.json
================================================
["\uD800\uD800\n"]

================================================
FILE: data/parsing/i_string_invalid_lonely_surrogate.json
================================================
["\ud800"]

================================================
FILE: data/parsing/i_string_invalid_surrogate.json
================================================
["\ud800abc"]

================================================
FILE: data/parsing/i_string_invalid_utf-8.json
================================================
[""]

================================================
FILE: data/parsing/i_string_inverted_surrogates_U+1D11E.json
================================================
["\uDd1e\uD834"]

================================================
FILE: data/parsing/i_string_iso_latin_1.json
================================================
[""]

================================================
FILE: data/parsing/i_string_lone_second_surrogate.json
================================================
["\uDFAA"]

================================================
FILE: data/parsing/i_string_lone_utf8_continuation_byte.json
================================================
[""]

================================================
FILE: data/parsing/i_string_not_in_unicode_range.json
================================================
[""]

================================================
FILE: data/parsing/i_string_overlong_sequence_2_bytes.json
================================================
[""]

================================================
FILE: data/parsing/i_string_overlong_sequence_6_bytes.json
================================================
[""]

================================================
FILE: data/parsing/i_string_overlong_sequence_6_bytes_null.json
================================================
[""]

================================================
FILE: data/parsing/i_string_truncated-utf-8.json
================================================
[""]

================================================
FILE: data/parsing/i_structure_UTF-8_BOM_empty_object.json
================================================
{}

================================================
FILE: data/parsing/n_array_1_true_without_comma.json
================================================
[1 true]

================================================
FILE: data/parsing/n_array_a_invalid_utf8.json
================================================
[a]

================================================
FILE: data/parsing/n_array_colon_instead_of_comma.json
================================================
["": 1]

================================================
FILE: data/parsing/n_array_comma_after_close.json
================================================
[""],

================================================
FILE: data/parsing/n_array_comma_and_number.json
================================================
[,1]

================================================
FILE: data/parsing/n_array_double_comma.json
================================================
[1,,2]

================================================
FILE: data/parsing/n_array_double_extra_comma.json
================================================
["x",,]

================================================
FILE: data/parsing/n_array_extra_close.json
================================================
["x"]]

================================================
FILE: data/parsing/n_array_extra_comma.json
================================================
["",]

================================================
FILE: data/parsing/n_array_incomplete.json
================================================
["x"

================================================
FILE: data/parsing/n_array_incomplete_invalid_value.json
================================================
[x

================================================
FILE: data/parsing/n_array_inner_array_no_comma.json
================================================
[3[4]]

================================================
FILE: data/parsing/n_array_invalid_utf8.json
================================================
[]

================================================
FILE: data/parsing/n_array_items_separated_by_semicolon.json
================================================
[1:2]

================================================
FILE: data/parsing/n_array_just_comma.json
================================================
[,]

================================================
FILE: data/parsing/n_array_just_minus.json
================================================
[-]

================================================
FILE: data/parsing/n_array_missing_value.json
================================================
[   , ""]

================================================
FILE: data/parsing/n_array_newlines_unclosed.json
================================================
["a",
4
,1,

================================================
FILE: data/parsing/n_array_number_and_comma.json
================================================
[1,]

================================================
FILE: data/parsing/n_array_number_and_several_commas.json
================================================
[1,,]

================================================
FILE: data/parsing/n_array_spaces_vertical_tab_formfeed.json
================================================
["a"\f]

================================================
FILE: data/parsing/n_array_star_inside.json
================================================
[*]

================================================
FILE: data/parsing/n_array_unclosed.json
================================================
[""

================================================
FILE: data/parsing/n_array_unclosed_trailing_comma.json
================================================
[1,

================================================
FILE: data/parsing/n_array_unclosed_with_new_lines.json
================================================
[1,
1
,1

================================================
FILE: data/parsing/n_array_unclosed_with_object_inside.json
================================================
[{}

================================================
FILE: data/parsing/n_incomplete_false.json
================================================
[fals]

================================================
FILE: data/parsing/n_incomplete_null.json
================================================
[nul]

================================================
FILE: data/parsing/n_incomplete_true.json
================================================
[tru]

================================================
FILE: data/parsing/n_number_++.json
================================================
[++1234]

================================================
FILE: data/parsing/n_number_+1.json
================================================
[+1]

================================================
FILE: data/parsing/n_number_+Inf.json
================================================
[+Inf]

================================================
FILE: data/parsing/n_number_-01.json
================================================
[-01]

================================================
FILE: data/parsing/n_number_-1.0..json
================================================
[-1.0.]

================================================
FILE: data/parsing/n_number_-2..json
================================================
[-2.]

================================================
FILE: data/parsing/n_number_-NaN.json
================================================
[-NaN]

================================================
FILE: data/parsing/n_number_.-1.json
================================================
[.-1]

================================================
FILE: data/parsing/n_number_.2e-3.json
================================================
[.2e-3]

================================================
FILE: data/parsing/n_number_0.1.2.json
================================================
[0.1.2]

================================================
FILE: data/parsing/n_number_0.3e+.json
================================================
[0.3e+]

================================================
FILE: data/parsing/n_number_0.3e.json
================================================
[0.3e]

================================================
FILE: data/parsing/n_number_0.e1.json
================================================
[0.e1]

================================================
FILE: data/parsing/n_number_0_capital_E+.json
================================================
[0E+]

================================================
FILE: data/parsing/n_number_0_capital_E.json
================================================
[0E]

================================================
FILE: data/parsing/n_number_0e+.json
================================================
[0e+]

================================================
FILE: data/parsing/n_number_0e.json
================================================
[0e]

================================================
FILE: data/parsing/n_number_1.0e+.json
================================================
[1.0e+]

================================================
FILE: data/parsing/n_number_1.0e-.json
================================================
[1.0e-]

================================================
FILE: data/parsing/n_number_1.0e.json
================================================
[1.0e]

================================================
FILE: data/parsing/n_number_1_000.json
================================================
[1 000.0]

================================================
FILE: data/parsing/n_number_1eE2.json
================================================
[1eE2]

================================================
FILE: data/parsing/n_number_2.e+3.json
================================================
[2.e+3]

================================================
FILE: data/parsing/n_number_2.e-3.json
================================================
[2.e-3]

================================================
FILE: data/parsing/n_number_2.e3.json
================================================
[2.e3]

================================================
FILE: data/parsing/n_number_9.e+.json
================================================
[9.e+]

================================================
FILE: data/parsing/n_number_Inf.json
================================================
[Inf]

================================================
FILE: data/parsing/n_number_NaN.json
================================================
[NaN]

================================================
FILE: data/parsing/n_number_U+FF11_fullwidth_digit_one.json
================================================
[1]

================================================
FILE: data/parsing/n_number_expression.json
================================================
[1+2]

================================================
FILE: data/parsing/n_number_hex_1_digit.json
================================================
[0x1]

================================================
FILE: data/parsing/n_number_hex_2_digits.json
================================================
[0x42]

================================================
FILE: data/parsing/n_number_infinity.json
================================================
[Infinity]

================================================
FILE: data/parsing/n_number_invalid+-.json
================================================
[0e+-1]

================================================
FILE: data/parsing/n_number_invalid-negative-real.json
================================================
[-123.123foo]

================================================
FILE: data/parsing/n_number_invalid-utf-8-in-bigger-int.json
================================================
[123]

================================================
FILE: data/parsing/n_number_invalid-utf-8-in-exponent.json
================================================
[1e1]

================================================
FILE: data/parsing/n_number_invalid-utf-8-in-int.json
================================================
[0]


================================================
FILE: data/parsing/n_number_minus_infinity.json
================================================
[-Infinity]

================================================
FILE: data/parsing/n_number_minus_sign_with_trailing_garbage.json
================================================
[-foo]

================================================
FILE: data/parsing/n_number_minus_space_1.json
================================================
[- 1]

================================================
FILE: data/parsing/n_number_neg_int_starting_with_zero.json
================================================
[-012]

================================================
FILE: data/parsing/n_number_neg_real_without_int_part.json
================================================
[-.123]

================================================
FILE: data/parsing/n_number_neg_with_garbage_at_end.json
================================================
[-1x]

================================================
FILE: data/parsing/n_number_real_garbage_after_e.json
================================================
[1ea]

================================================
FILE: data/parsing/n_number_real_with_invalid_utf8_after_e.json
================================================
[1e]

================================================
FILE: data/parsing/n_number_real_without_fractional_part.json
================================================
[1.]

================================================
FILE: data/parsing/n_number_starting_with_dot.json
================================================
[.123]

================================================
FILE: data/parsing/n_number_with_alpha.json
================================================
[1.2a-3]

================================================
FILE: data/parsing/n_number_with_alpha_char.json
================================================
[1.8011670033376514H-308]

================================================
FILE: data/parsing/n_number_with_leading_zero.json
================================================
[012]

================================================
FILE: data/parsing/n_object_bad_value.json
================================================
["x", truth]

================================================
FILE: data/parsing/n_object_bracket_key.json
================================================
{[: "x"}


================================================
FILE: data/parsing/n_object_comma_instead_of_colon.json
================================================
{"x", null}

================================================
FILE: data/parsing/n_object_double_colon.json
================================================
{"x"::"b"}

================================================
FILE: data/parsing/n_object_emoji.json
================================================
{🇨🇭}

================================================
FILE: data/parsing/n_object_garbage_at_end.json
================================================
{"a":"a" 123}

================================================
FILE: data/parsing/n_object_key_with_single_quotes.json
================================================
{key: 'value'}

================================================
FILE: data/parsing/n_object_lone_continuation_byte_in_key_and_trailing_comma.json
================================================
{"":"0",}

================================================
FILE: data/parsing/n_object_missing_colon.json
================================================
{"a" b}

================================================
FILE: data/parsing/n_object_missing_key.json
================================================
{:"b"}

================================================
FILE: data/parsing/n_object_missing_semicolon.json
================================================
{"a" "b"}

================================================
FILE: data/parsing/n_object_missing_value.json
================================================
{"a":

================================================
FILE: data/parsing/n_object_no-colon.json
================================================
{"a"

================================================
FILE: data/parsing/n_object_non_string_key.json
================================================
{1:1}

================================================
FILE: data/parsing/n_object_non_string_key_but_huge_number_instead.json
================================================
{9999E9999:1}

================================================
FILE: data/parsing/n_object_repeated_null_null.json
================================================
{null:null,null:null}

================================================
FILE: data/parsing/n_object_several_trailing_commas.json
================================================
{"id":0,,,,,}

================================================
FILE: data/parsing/n_object_single_quote.json
================================================
{'a':0}

================================================
FILE: data/parsing/n_object_trailing_comma.json
================================================
{"id":0,}

================================================
FILE: data/parsing/n_object_trailing_comment.json
================================================
{"a":"b"}/**/

================================================
FILE: data/parsing/n_object_trailing_comment_open.json
================================================
{"a":"b"}/**//

================================================
FILE: data/parsing/n_object_trailing_comment_slash_open.json
================================================
{"a":"b"}//

================================================
FILE: data/parsing/n_object_trailing_comment_slash_open_incomplete.json
================================================
{"a":"b"}/

================================================
FILE: data/parsing/n_object_two_commas_in_a_row.json
================================================
{"a":"b",,"c":"d"}

================================================
FILE: data/parsing/n_object_unquoted_key.json
================================================
{a: "b"}

================================================
FILE: data/parsing/n_object_unterminated-value.json
================================================
{"a":"a

================================================
FILE: data/parsing/n_object_with_single_string.json
================================================
{ "foo" : "bar", "a" }

================================================
FILE: data/parsing/n_object_with_trailing_garbage.json
================================================
{"a":"b"}#

================================================
FILE: data/parsing/n_single_space.json
================================================
 

================================================
FILE: data/parsing/n_string_1_surrogate_then_escape.json
================================================
["\uD800\"]

================================================
FILE: data/parsing/n_string_1_surrogate_then_escape_u.json
================================================
["\uD800\u"]

================================================
FILE: data/parsing/n_string_1_surrogate_then_escape_u1.json
================================================
["\uD800\u1"]

================================================
FILE: data/parsing/n_string_1_surrogate_then_escape_u1x.json
================================================
["\uD800\u1x"]

================================================
FILE: data/parsing/n_string_accentuated_char_no_quotes.json
================================================
[é]

================================================
FILE: data/parsing/n_string_escape_x.json
================================================
["\x00"]

================================================
FILE: data/parsing/n_string_escaped_backslash_bad.json
================================================
["\\\"]

================================================
FILE: data/parsing/n_string_escaped_ctrl_char_tab.json
================================================
["\	"]

================================================
FILE: data/parsing/n_string_escaped_emoji.json
================================================
["\🌀"]

================================================
FILE: data/parsing/n_string_incomplete_escape.json
================================================
["\"]

================================================
FILE: data/parsing/n_string_incomplete_escaped_character.json
================================================
["\u00A"]

================================================
FILE: data/parsing/n_string_incomplete_surrogate.json
================================================
["\uD834\uDd"]

================================================
FILE: data/parsing/n_string_incomplete_surrogate_escape_invalid.json
================================================
["\uD800\uD800\x"]

================================================
FILE: data/parsing/n_string_invalid-utf-8-in-escape.json
================================================
["\u"]

================================================
FILE: data/parsing/n_string_invalid_backslash_esc.json
================================================
["\a"]

================================================
FILE: data/parsing/n_string_invalid_unicode_escape.json
================================================
["\uqqqq"]

================================================
FILE: data/parsing/n_string_invalid_utf8_after_escape.json
================================================
["\"]

================================================
FILE: data/parsing/n_string_leading_uescaped_thinspace.json
================================================
[\u0020"asd"]

================================================
FILE: data/parsing/n_string_no_quotes_with_bad_escape.json
================================================
[\n]

================================================
FILE: data/parsing/n_string_single_doublequote.json
================================================
"

================================================
FILE: data/parsing/n_string_single_quote.json
================================================
['single quote']

================================================
FILE: data/parsing/n_string_single_string_no_double_quotes.json
================================================
abc

================================================
FILE: data/parsing/n_string_start_escape_unclosed.json
================================================
["\

================================================
FILE: data/parsing/n_string_unescaped_newline.json
================================================
["new
line"]

================================================
FILE: data/parsing/n_string_unescaped_tab.json
================================================
["	"]

================================================
FILE: data/parsing/n_string_unicode_CapitalU.json
================================================
"\UA66D"

================================================
FILE: data/parsing/n_string_with_trailing_garbage.json
================================================
""x

================================================
FILE: data/parsing/n_structure_U+2060_word_joined.json
================================================
[⁠]

================================================
FILE: data/parsing/n_structure_UTF8_BOM_no_data.json
================================================


================================================
FILE: data/parsing/n_structure_angle_bracket_..json
================================================
<.>

================================================
FILE: data/parsing/n_structure_angle_bracket_null.json
================================================
[<null>]

================================================
FILE: data/parsing/n_structure_array_trailing_garbage.json
================================================
[1]x

================================================
FILE: data/parsing/n_structure_array_with_extra_array_close.json
================================================
[1]]

================================================
FILE: data/parsing/n_structure_array_with_unclosed_string.json
================================================
["asd]

================================================
FILE: data/parsing/n_structure_ascii-unicode-identifier.json
================================================
aå

================================================
FILE: data/parsing/n_structure_capitalized_True.json
================================================
[True]

================================================
FILE: data/parsing/n_structure_close_unopened_array.json
================================================
1]

================================================
FILE: data/parsing/n_structure_comma_instead_of_closing_brace.json
================================================
{"x": true,

================================================
FILE: data/parsing/n_structure_double_array.json
================================================
[][]

================================================
FILE: data/parsing/n_structure_end_array.json
================================================
]

================================================
FILE: data/parsing/n_structure_incomplete_UTF8_BOM.json
================================================
{}

================================================
FILE: data/parsing/n_structure_lone-invalid-utf-8.json
================================================


================================================
FILE: data/parsing/n_structure_lone-open-bracket.json
================================================
[

================================================
FILE: data/parsing/n_structure_no_data.json
================================================


================================================
FILE: data/parsing/n_structure_number_with_trailing_garbage.json
================================================
2@

================================================
FILE: data/parsing/n_structure_object_followed_by_closing_object.json
================================================
{}}

================================================
FILE: data/parsing/n_structure_object_unclosed_no_value.json
================================================
{"":

================================================
FILE: data/parsing/n_structure_object_with_comment.json
================================================
{"a":/*comment*/"b"}

================================================
FILE: data/parsing/n_structure_object_with_trailing_garbage.json
================================================
{"a": true} "x"

================================================
FILE: data/parsing/n_structure_open_array_apostrophe.json
================================================
['

================================================
FILE: data/parsing/n_structure_open_array_comma.json
================================================
[,

================================================
FILE: data/parsing/n_structure_open_array_open_object.json
================================================
[{

================================================
FILE: data/parsing/n_structure_open_array_open_string.json
================================================
["a

================================================
FILE: data/parsing/n_structure_open_array_string.json
================================================
["a"

================================================
FILE: data/parsing/n_structure_open_object.json
================================================
{

================================================
FILE: data/parsing/n_structure_open_object_close_array.json
================================================
{]

================================================
FILE: data/parsing/n_structure_open_object_comma.json
================================================
{,

================================================
FILE: data/parsing/n_structure_open_object_open_array.json
================================================
{[

================================================
FILE: data/parsing/n_structure_open_object_open_string.json
================================================
{"a

================================================
FILE: data/parsing/n_structure_open_object_string_with_apostrophes.json
================================================
{'a'

================================================
FILE: data/parsing/n_structure_open_open.json
================================================
["\{["\{["\{["\{

================================================
FILE: data/parsing/n_structure_single_eacute.json
================================================


================================================
FILE: data/parsing/n_structure_single_star.json
================================================
*

================================================
FILE: data/parsing/n_structure_trailing_#.json
================================================
{"a":"b"}#{}

================================================
FILE: data/parsing/n_structure_uescaped_LF_before_string.json
================================================
[\u000A""]

================================================
FILE: data/parsing/n_structure_unclosed_array.json
================================================
[1

================================================
FILE: data/parsing/n_structure_unclosed_array_partial_null.json
================================================
[ false, nul

================================================
FILE: data/parsing/n_structure_unclosed_array_unfinished_false.json
================================================
[ true, fals

================================================
FILE: data/parsing/n_structure_unclosed_array_unfinished_true.json
================================================
[ false, tru

================================================
FILE: data/parsing/n_structure_unclosed_object.json
================================================
{"asd":"asd"

================================================
FILE: data/parsing/n_structure_unicode-identifier.json
================================================
å

================================================
FILE: data/parsing/n_structure_whitespace_U+2060_word_joiner.json
================================================
[⁠]

================================================
FILE: data/parsing/n_structure_whitespace_formfeed.json
================================================
[]

================================================
FILE: data/parsing/y_array_arraysWithSpaces.json
================================================
[[]   ]

================================================
FILE: data/parsing/y_array_empty-string.json
================================================
[""]

================================================
FILE: data/parsing/y_array_empty.json
================================================
[]

================================================
FILE: data/parsing/y_array_ending_with_newline.json
================================================
["a"]

================================================
FILE: data/parsing/y_array_false.json
================================================
[false]

================================================
FILE: data/parsing/y_array_heterogeneous.json
================================================
[null, 1, "1", {}]

================================================
FILE: data/parsing/y_array_null.json
================================================
[null]

================================================
FILE: data/parsing/y_array_with_1_and_newline.json
================================================
[1
]

================================================
FILE: data/parsing/y_array_with_leading_space.json
================================================
 [1]

================================================
FILE: data/parsing/y_array_with_several_null.json
================================================
[1,null,null,null,2]

================================================
FILE: data/parsing/y_array_with_trailing_space.json
================================================
[2] 

================================================
FILE: data/parsing/y_number.json
================================================
[123e65]

================================================
FILE: data/parsing/y_number_0e+1.json
================================================
[0e+1]

================================================
FILE: data/parsing/y_number_0e1.json
================================================
[0e1]

================================================
FILE: data/parsing/y_number_after_space.json
================================================
[ 4]

================================================
FILE: data/parsing/y_number_double_close_to_zero.json
================================================
[-0.000000000000000000000000000000000000000000000000000000000000000000000000000001]


================================================
FILE: data/parsing/y_number_int_with_exp.json
================================================
[20e1]

================================================
FILE: data/parsing/y_number_minus_zero.json
================================================
[-0]

================================================
FILE: data/parsing/y_number_negative_int.json
================================================
[-123]

================================================
FILE: data/parsing/y_number_negative_one.json
================================================
[-1]

================================================
FILE: data/parsing/y_number_negative_zero.json
================================================
[-0]

================================================
FILE: data/parsing/y_number_real_capital_e.json
================================================
[1E22]

================================================
FILE: data/parsing/y_number_real_capital_e_neg_exp.json
================================================
[1E-2]

================================================
FILE: data/parsing/y_number_real_capital_e_pos_exp.json
================================================
[1E+2]

================================================
FILE: data/parsing/y_number_real_exponent.json
================================================
[123e45]

================================================
FILE: data/parsing/y_number_real_fraction_exponent.json
================================================
[123.456e78]

================================================
FILE: data/parsing/y_number_real_neg_exp.json
================================================
[1e-2]

================================================
FILE: data/parsing/y_number_real_pos_exponent.json
================================================
[1e+2]

================================================
FILE: data/parsing/y_number_simple_int.json
================================================
[123]

================================================
FILE: data/parsing/y_number_simple_real.json
================================================
[123.456789]

================================================
FILE: data/parsing/y_object.json
================================================
{"asd":"sdf", "dfg":"fgh"}

================================================
FILE: data/parsing/y_object_basic.json
================================================
{"asd":"sdf"}

================================================
FILE: data/parsing/y_object_duplicated_key.json
================================================
{"a":"b","a":"c"}

================================================
FILE: data/parsing/y_object_duplicated_key_and_value.json
================================================
{"a":"b","a":"b"}

================================================
FILE: data/parsing/y_object_empty.json
================================================
{}

================================================
FILE: data/parsing/y_object_empty_key.json
================================================
{"":0}

================================================
FILE: data/parsing/y_object_escaped_null_in_key.json
================================================
{"foo\u0000bar": 42}

================================================
FILE: data/parsing/y_object_extreme_numbers.json
================================================
{ "min": -1.0e+28, "max": 1.0e+28 }

================================================
FILE: data/parsing/y_object_long_strings.json
================================================
{"x":[{"id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}], "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}

================================================
FILE: data/parsing/y_object_simple.json
================================================
{"a":[]}

================================================
FILE: data/parsing/y_object_string_unicode.json
================================================
{"title":"\u041f\u043e\u043b\u0442\u043e\u0440\u0430 \u0417\u0435\u043c\u043b\u0435\u043a\u043e\u043f\u0430" }

================================================
FILE: data/parsing/y_object_with_newlines.json
================================================
{
"a": "b"
}

================================================
FILE: data/parsing/y_string_1_2_3_bytes_UTF-8_sequences.json
================================================
["\u0060\u012a\u12AB"]

================================================
FILE: data/parsing/y_string_accepted_surrogate_pair.json
================================================
["\uD801\udc37"]

================================================
FILE: data/parsing/y_string_accepted_surrogate_pairs.json
================================================
["\ud83d\ude39\ud83d\udc8d"]

================================================
FILE: data/parsing/y_string_allowed_escapes.json
================================================
["\"\\\/\b\f\n\r\t"]

================================================
FILE: data/parsing/y_string_backslash_and_u_escaped_zero.json
================================================
["\\u0000"]

================================================
FILE: data/parsing/y_string_backslash_doublequotes.json
================================================
["\""]

================================================
FILE: data/parsing/y_string_comments.json
================================================
["a/*b*/c/*d//e"]

================================================
FILE: data/parsing/y_string_double_escape_a.json
================================================
["\\a"]

================================================
FILE: data/parsing/y_string_double_escape_n.json
================================================
["\\n"]

================================================
FILE: data/parsing/y_string_escaped_control_character.json
================================================
["\u0012"]

================================================
FILE: data/parsing/y_string_escaped_noncharacter.json
================================================
["\uFFFF"]

================================================
FILE: data/parsing/y_string_in_array.json
================================================
["asd"]

================================================
FILE: data/parsing/y_string_in_array_with_leading_space.json
================================================
[ "asd"]

================================================
FILE: data/parsing/y_string_last_surrogates_1_and_2.json
================================================
["\uDBFF\uDFFF"]

================================================
FILE: data/parsing/y_string_nbsp_uescaped.json
================================================
["new\u00A0line"]

================================================
FILE: data/parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json
================================================
["􏿿"]

================================================
FILE: data/parsing/y_string_nonCharacterInUTF-8_U+FFFF.json
================================================
["￿"]

================================================
FILE: data/parsing/y_string_null_escape.json
================================================
["\u0000"]

================================================
FILE: data/parsing/y_string_one-byte-utf-8.json
================================================
["\u002c"]

================================================
FILE: data/parsing/y_string_pi.json
================================================
["π"]

================================================
FILE: data/parsing/y_string_reservedCharacterInUTF-8_U+1BFFF.json
================================================
["𛿿"]

================================================
FILE: data/parsing/y_string_simple_ascii.json
================================================
["asd "]

================================================
FILE: data/parsing/y_string_space.json
================================================
" "

================================================
FILE: data/parsing/y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json
================================================
["\uD834\uDd1e"]

================================================
FILE: data/parsing/y_string_three-byte-utf-8.json
================================================
["\u0821"]

================================================
FILE: data/parsing/y_string_two-byte-utf-8.json
================================================
["\u0123"]

================================================
FILE: data/parsing/y_string_u+2028_line_sep.json
================================================
["
"]

================================================
FILE: data/parsing/y_string_u+2029_par_sep.json
================================================
["
"]

================================================
FILE: data/parsing/y_string_uEscape.json
================================================
["\u0061\u30af\u30EA\u30b9"]

================================================
FILE: data/parsing/y_string_uescaped_newline.json
================================================
["new\u000Aline"]

================================================
FILE: data/parsing/y_string_unescaped_char_delete.json
================================================
[""]

================================================
FILE: data/parsing/y_string_unicode.json
================================================
["\uA66D"]

================================================
FILE: data/parsing/y_string_unicodeEscapedBackslash.json
================================================
["\u005C"]

================================================
FILE: data/parsing/y_string_unicode_2.json
================================================
["⍂㈴⍂"]

================================================
FILE: data/parsing/y_string_unicode_U+10FFFE_nonchar.json
================================================
["\uDBFF\uDFFE"]

================================================
FILE: data/parsing/y_string_unicode_U+1FFFE_nonchar.json
================================================
["\uD83F\uDFFE"]

================================================
FILE: data/parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json
================================================
["\u200B"]

================================================
FILE: data/parsing/y_string_unicode_U+2064_invisible_plus.json
================================================
["\u2064"]

================================================
FILE: data/parsing/y_string_unicode_U+FDD0_nonchar.json
================================================
["\uFDD0"]

================================================
FILE: data/parsing/y_string_unicode_U+FFFE_nonchar.json
================================================
["\uFFFE"]

================================================
FILE: data/parsing/y_string_unicode_escaped_double_quote.json
================================================
["\u0022"]

================================================
FILE: data/parsing/y_string_utf8.json
================================================
["€𝄞"]

================================================
FILE: data/parsing/y_string_with_del_character.json
================================================
["aa"]

================================================
FILE: data/parsing/y_structure_lonely_false.json
================================================
false

================================================
FILE: data/parsing/y_structure_lonely_int.json
================================================
42

================================================
FILE: data/parsing/y_structure_lonely_negative_real.json
================================================
-0.1

================================================
FILE: data/parsing/y_structure_lonely_null.json
================================================
null

================================================
FILE: data/parsing/y_structure_lonely_string.json
================================================
"asd"

================================================
FILE: data/parsing/y_structure_lonely_true.json
================================================
true

================================================
FILE: data/parsing/y_structure_string_empty.json
================================================
""

================================================
FILE: data/parsing/y_structure_trailing_newline.json
================================================
["a"]


================================================
FILE: data/parsing/y_structure_true_in_array.json
================================================
[true]

================================================
FILE: data/parsing/y_structure_whitespace_array.json
================================================
 [] 

================================================
FILE: data/roundtrip/roundtrip01.json
================================================
[null]

================================================
FILE: data/roundtrip/roundtrip02.json
================================================
[true]

================================================
FILE: data/roundtrip/roundtrip03.json
================================================
[false]

================================================
FILE: data/roundtrip/roundtrip04.json
================================================
[0]

================================================
FILE: data/roundtrip/roundtrip05.json
================================================
["foo"]

================================================
FILE: data/roundtrip/roundtrip06.json
================================================
[]

================================================
FILE: data/roundtrip/roundtrip07.json
================================================
{}

================================================
FILE: data/roundtrip/roundtrip08.json
================================================
[0,1]

================================================
FILE: data/roundtrip/roundtrip09.json
================================================
{"foo":"bar"}

================================================
FILE: data/roundtrip/roundtrip10.json
================================================
{"a":null,"foo":"bar"}

================================================
FILE: data/roundtrip/roundtrip11.json
================================================
[-1]

================================================
FILE: data/roundtrip/roundtrip12.json
================================================
[-2147483648]

================================================
FILE: data/roundtrip/roundtrip13.json
================================================
[-1234567890123456789]

================================================
FILE: data/roundtrip/roundtrip14.json
================================================
[-9223372036854775808]

================================================
FILE: data/roundtrip/roundtrip15.json
================================================
[1]

================================================
FILE: data/roundtrip/roundtrip16.json
================================================
[2147483647]

================================================
FILE: data/roundtrip/roundtrip17.json
================================================
[4294967295]

================================================
FILE: data/roundtrip/roundtrip18.json
================================================
[1234567890123456789]

================================================
FILE: data/roundtrip/roundtrip19.json
================================================
[9223372036854775807]

================================================
FILE: data/roundtrip/roundtrip20.json
================================================
[0.0]

================================================
FILE: data/roundtrip/roundtrip21.json
================================================
[-0.0]

================================================
FILE: data/roundtrip/roundtrip22.json
================================================
[1.2345]

================================================
FILE: data/roundtrip/roundtrip23.json
================================================
[-1.2345]

================================================
FILE: data/roundtrip/roundtrip24.json
================================================
[5e-324]

================================================
FILE: data/roundtrip/roundtrip25.json
================================================
[2.225073858507201e-308]

================================================
FILE: data/roundtrip/roundtrip26.json
================================================
[2.2250738585072014e-308]

================================================
FILE: data/roundtrip/roundtrip27.json
================================================
[1.7976931348623157e308]

================================================
FILE: data/transform/number_1.0.json
================================================
[1.0]

================================================
FILE: data/transform/number_1.000000000000000005.json
================================================
[1.000000000000000005]

================================================
FILE: data/transform/number_1000000000000000.json
================================================
[1000000000000000]


================================================
FILE: data/transform/number_10000000000000000999.json
================================================
[10000000000000000999]

================================================
FILE: data/transform/number_1e-999.json
================================================
[1E-999]

================================================
FILE: data/transform/number_1e6.json
================================================
[1E6]

================================================
FILE: data/transform/object_key_nfc_nfd.json
================================================
{"é":"NFC","é":"NFD"}

================================================
FILE: data/transform/object_key_nfd_nfc.json
================================================
{"é":"NFD","é":"NFC"}

================================================
FILE: data/transform/object_same_key_different_values.json
================================================
{"a":1,"a":2}

================================================
FILE: data/transform/object_same_key_same_value.json
================================================
{"a":1,"a":1}

================================================
FILE: data/transform/object_same_key_unclear_values.json
================================================
{"a":0, "a":-0}


================================================
FILE: data/transform/string_1_escaped_invalid_codepoint.json
================================================
["\uD800"]

================================================
FILE: data/transform/string_1_invalid_codepoint.json
================================================
[""]

================================================
FILE: data/transform/string_2_escaped_invalid_codepoints.json
================================================
["\uD800\uD800"]

================================================
FILE: data/transform/string_2_invalid_codepoints.json
================================================
[""]

================================================
FILE: data/transform/string_3_escaped_invalid_codepoints.json
================================================
["\uD800\uD800\uD800"]

================================================
FILE: data/transform/string_3_invalid_codepoints.json
================================================
[""]

================================================
FILE: data/transform/string_with_escaped_NULL.json
================================================
["A\u0000B"]

================================================
FILE: include/yyjson/yyjson.c
================================================
/*==============================================================================
 Copyright (c) 2020 YaoYuan <ibireme@gmail.com>
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including wi
Download .txt
gitextract_wnu8x3ig/

├── .gitattributes
├── .github/
│   ├── actions/
│   │   └── manylinux/
│   │       └── action.yaml
│   └── workflows/
│       ├── artifact.yaml
│       ├── lint.yaml
│       └── unusual.yaml
├── .gitignore
├── CHANGELOG.md
├── Cargo.toml
├── LICENSE-APACHE
├── LICENSE-MIT
├── LICENSE-MPL-2.0
├── README.md
├── bench/
│   ├── __init__.py
│   ├── benchmark_dumps.py
│   ├── benchmark_loads.py
│   ├── data.py
│   ├── requirements.txt
│   ├── run_func
│   └── util.py
├── build.rs
├── ci/
│   ├── config.toml
│   └── sdist.toml
├── data/
│   ├── blns.txt.xz
│   ├── canada.json.xz
│   ├── citm_catalog.json.xz
│   ├── github.json.xz
│   ├── issue331_1.json.xz
│   ├── issue331_2.json.xz
│   ├── jsonchecker/
│   │   ├── fail01.json
│   │   ├── fail02.json
│   │   ├── fail03.json
│   │   ├── fail04.json
│   │   ├── fail05.json
│   │   ├── fail06.json
│   │   ├── fail07.json
│   │   ├── fail08.json
│   │   ├── fail09.json
│   │   ├── fail10.json
│   │   ├── fail11.json
│   │   ├── fail12.json
│   │   ├── fail13.json
│   │   ├── fail14.json
│   │   ├── fail15.json
│   │   ├── fail16.json
│   │   ├── fail17.json
│   │   ├── fail18.json
│   │   ├── fail19.json
│   │   ├── fail20.json
│   │   ├── fail21.json
│   │   ├── fail22.json
│   │   ├── fail23.json
│   │   ├── fail24.json
│   │   ├── fail25.json
│   │   ├── fail26.json
│   │   ├── fail27.json
│   │   ├── fail28.json
│   │   ├── fail29.json
│   │   ├── fail30.json
│   │   ├── fail31.json
│   │   ├── fail32.json
│   │   ├── fail33.json
│   │   ├── pass01.json
│   │   ├── pass02.json
│   │   └── pass03.json
│   ├── parsing/
│   │   ├── i_number_double_huge_neg_exp.json
│   │   ├── i_number_huge_exp.json
│   │   ├── i_number_neg_int_huge_exp.json
│   │   ├── i_number_pos_double_huge_exp.json
│   │   ├── i_number_real_neg_overflow.json
│   │   ├── i_number_real_pos_overflow.json
│   │   ├── i_number_real_underflow.json
│   │   ├── i_number_too_big_neg_int.json
│   │   ├── i_number_too_big_pos_int.json
│   │   ├── i_number_very_big_negative_int.json
│   │   ├── i_object_key_lone_2nd_surrogate.json
│   │   ├── i_string_1st_surrogate_but_2nd_missing.json
│   │   ├── i_string_1st_valid_surrogate_2nd_invalid.json
│   │   ├── i_string_UTF-16LE_with_BOM.json
│   │   ├── i_string_UTF-8_invalid_sequence.json
│   │   ├── i_string_UTF8_surrogate_U+D800.json
│   │   ├── i_string_incomplete_surrogate_and_escape_valid.json
│   │   ├── i_string_incomplete_surrogate_pair.json
│   │   ├── i_string_incomplete_surrogates_escape_valid.json
│   │   ├── i_string_invalid_lonely_surrogate.json
│   │   ├── i_string_invalid_surrogate.json
│   │   ├── i_string_invalid_utf-8.json
│   │   ├── i_string_inverted_surrogates_U+1D11E.json
│   │   ├── i_string_iso_latin_1.json
│   │   ├── i_string_lone_second_surrogate.json
│   │   ├── i_string_lone_utf8_continuation_byte.json
│   │   ├── i_string_not_in_unicode_range.json
│   │   ├── i_string_overlong_sequence_2_bytes.json
│   │   ├── i_string_overlong_sequence_6_bytes.json
│   │   ├── i_string_overlong_sequence_6_bytes_null.json
│   │   ├── i_string_truncated-utf-8.json
│   │   ├── i_string_utf16BE_no_BOM.json
│   │   ├── i_string_utf16LE_no_BOM.json
│   │   ├── i_structure_500_nested_arrays.json.xz
│   │   ├── i_structure_UTF-8_BOM_empty_object.json
│   │   ├── n_array_1_true_without_comma.json
│   │   ├── n_array_a_invalid_utf8.json
│   │   ├── n_array_colon_instead_of_comma.json
│   │   ├── n_array_comma_after_close.json
│   │   ├── n_array_comma_and_number.json
│   │   ├── n_array_double_comma.json
│   │   ├── n_array_double_extra_comma.json
│   │   ├── n_array_extra_close.json
│   │   ├── n_array_extra_comma.json
│   │   ├── n_array_incomplete.json
│   │   ├── n_array_incomplete_invalid_value.json
│   │   ├── n_array_inner_array_no_comma.json
│   │   ├── n_array_invalid_utf8.json
│   │   ├── n_array_items_separated_by_semicolon.json
│   │   ├── n_array_just_comma.json
│   │   ├── n_array_just_minus.json
│   │   ├── n_array_missing_value.json
│   │   ├── n_array_newlines_unclosed.json
│   │   ├── n_array_number_and_comma.json
│   │   ├── n_array_number_and_several_commas.json
│   │   ├── n_array_spaces_vertical_tab_formfeed.json
│   │   ├── n_array_star_inside.json
│   │   ├── n_array_unclosed.json
│   │   ├── n_array_unclosed_trailing_comma.json
│   │   ├── n_array_unclosed_with_new_lines.json
│   │   ├── n_array_unclosed_with_object_inside.json
│   │   ├── n_incomplete_false.json
│   │   ├── n_incomplete_null.json
│   │   ├── n_incomplete_true.json
│   │   ├── n_multidigit_number_then_00.json
│   │   ├── n_number_++.json
│   │   ├── n_number_+1.json
│   │   ├── n_number_+Inf.json
│   │   ├── n_number_-01.json
│   │   ├── n_number_-1.0..json
│   │   ├── n_number_-2..json
│   │   ├── n_number_-NaN.json
│   │   ├── n_number_.-1.json
│   │   ├── n_number_.2e-3.json
│   │   ├── n_number_0.1.2.json
│   │   ├── n_number_0.3e+.json
│   │   ├── n_number_0.3e.json
│   │   ├── n_number_0.e1.json
│   │   ├── n_number_0_capital_E+.json
│   │   ├── n_number_0_capital_E.json
│   │   ├── n_number_0e+.json
│   │   ├── n_number_0e.json
│   │   ├── n_number_1.0e+.json
│   │   ├── n_number_1.0e-.json
│   │   ├── n_number_1.0e.json
│   │   ├── n_number_1_000.json
│   │   ├── n_number_1eE2.json
│   │   ├── n_number_2.e+3.json
│   │   ├── n_number_2.e-3.json
│   │   ├── n_number_2.e3.json
│   │   ├── n_number_9.e+.json
│   │   ├── n_number_Inf.json
│   │   ├── n_number_NaN.json
│   │   ├── n_number_U+FF11_fullwidth_digit_one.json
│   │   ├── n_number_expression.json
│   │   ├── n_number_hex_1_digit.json
│   │   ├── n_number_hex_2_digits.json
│   │   ├── n_number_infinity.json
│   │   ├── n_number_invalid+-.json
│   │   ├── n_number_invalid-negative-real.json
│   │   ├── n_number_invalid-utf-8-in-bigger-int.json
│   │   ├── n_number_invalid-utf-8-in-exponent.json
│   │   ├── n_number_invalid-utf-8-in-int.json
│   │   ├── n_number_minus_infinity.json
│   │   ├── n_number_minus_sign_with_trailing_garbage.json
│   │   ├── n_number_minus_space_1.json
│   │   ├── n_number_neg_int_starting_with_zero.json
│   │   ├── n_number_neg_real_without_int_part.json
│   │   ├── n_number_neg_with_garbage_at_end.json
│   │   ├── n_number_real_garbage_after_e.json
│   │   ├── n_number_real_with_invalid_utf8_after_e.json
│   │   ├── n_number_real_without_fractional_part.json
│   │   ├── n_number_starting_with_dot.json
│   │   ├── n_number_with_alpha.json
│   │   ├── n_number_with_alpha_char.json
│   │   ├── n_number_with_leading_zero.json
│   │   ├── n_object_bad_value.json
│   │   ├── n_object_bracket_key.json
│   │   ├── n_object_comma_instead_of_colon.json
│   │   ├── n_object_double_colon.json
│   │   ├── n_object_emoji.json
│   │   ├── n_object_garbage_at_end.json
│   │   ├── n_object_key_with_single_quotes.json
│   │   ├── n_object_lone_continuation_byte_in_key_and_trailing_comma.json
│   │   ├── n_object_missing_colon.json
│   │   ├── n_object_missing_key.json
│   │   ├── n_object_missing_semicolon.json
│   │   ├── n_object_missing_value.json
│   │   ├── n_object_no-colon.json
│   │   ├── n_object_non_string_key.json
│   │   ├── n_object_non_string_key_but_huge_number_instead.json
│   │   ├── n_object_repeated_null_null.json
│   │   ├── n_object_several_trailing_commas.json
│   │   ├── n_object_single_quote.json
│   │   ├── n_object_trailing_comma.json
│   │   ├── n_object_trailing_comment.json
│   │   ├── n_object_trailing_comment_open.json
│   │   ├── n_object_trailing_comment_slash_open.json
│   │   ├── n_object_trailing_comment_slash_open_incomplete.json
│   │   ├── n_object_two_commas_in_a_row.json
│   │   ├── n_object_unquoted_key.json
│   │   ├── n_object_unterminated-value.json
│   │   ├── n_object_with_single_string.json
│   │   ├── n_object_with_trailing_garbage.json
│   │   ├── n_single_space.json
│   │   ├── n_string_1_surrogate_then_escape.json
│   │   ├── n_string_1_surrogate_then_escape_u.json
│   │   ├── n_string_1_surrogate_then_escape_u1.json
│   │   ├── n_string_1_surrogate_then_escape_u1x.json
│   │   ├── n_string_accentuated_char_no_quotes.json
│   │   ├── n_string_backslash_00.json
│   │   ├── n_string_escape_x.json
│   │   ├── n_string_escaped_backslash_bad.json
│   │   ├── n_string_escaped_ctrl_char_tab.json
│   │   ├── n_string_escaped_emoji.json
│   │   ├── n_string_incomplete_escape.json
│   │   ├── n_string_incomplete_escaped_character.json
│   │   ├── n_string_incomplete_surrogate.json
│   │   ├── n_string_incomplete_surrogate_escape_invalid.json
│   │   ├── n_string_invalid-utf-8-in-escape.json
│   │   ├── n_string_invalid_backslash_esc.json
│   │   ├── n_string_invalid_unicode_escape.json
│   │   ├── n_string_invalid_utf8_after_escape.json
│   │   ├── n_string_leading_uescaped_thinspace.json
│   │   ├── n_string_no_quotes_with_bad_escape.json
│   │   ├── n_string_single_doublequote.json
│   │   ├── n_string_single_quote.json
│   │   ├── n_string_single_string_no_double_quotes.json
│   │   ├── n_string_start_escape_unclosed.json
│   │   ├── n_string_unescaped_crtl_char.json
│   │   ├── n_string_unescaped_newline.json
│   │   ├── n_string_unescaped_tab.json
│   │   ├── n_string_unicode_CapitalU.json
│   │   ├── n_string_with_trailing_garbage.json
│   │   ├── n_structure_100000_opening_arrays.json.xz
│   │   ├── n_structure_U+2060_word_joined.json
│   │   ├── n_structure_UTF8_BOM_no_data.json
│   │   ├── n_structure_angle_bracket_..json
│   │   ├── n_structure_angle_bracket_null.json
│   │   ├── n_structure_array_trailing_garbage.json
│   │   ├── n_structure_array_with_extra_array_close.json
│   │   ├── n_structure_array_with_unclosed_string.json
│   │   ├── n_structure_ascii-unicode-identifier.json
│   │   ├── n_structure_capitalized_True.json
│   │   ├── n_structure_close_unopened_array.json
│   │   ├── n_structure_comma_instead_of_closing_brace.json
│   │   ├── n_structure_double_array.json
│   │   ├── n_structure_end_array.json
│   │   ├── n_structure_incomplete_UTF8_BOM.json
│   │   ├── n_structure_lone-invalid-utf-8.json
│   │   ├── n_structure_lone-open-bracket.json
│   │   ├── n_structure_no_data.json
│   │   ├── n_structure_null-byte-outside-string.json
│   │   ├── n_structure_number_with_trailing_garbage.json
│   │   ├── n_structure_object_followed_by_closing_object.json
│   │   ├── n_structure_object_unclosed_no_value.json
│   │   ├── n_structure_object_with_comment.json
│   │   ├── n_structure_object_with_trailing_garbage.json
│   │   ├── n_structure_open_array_apostrophe.json
│   │   ├── n_structure_open_array_comma.json
│   │   ├── n_structure_open_array_object.json.xz
│   │   ├── n_structure_open_array_open_object.json
│   │   ├── n_structure_open_array_open_string.json
│   │   ├── n_structure_open_array_string.json
│   │   ├── n_structure_open_object.json
│   │   ├── n_structure_open_object_close_array.json
│   │   ├── n_structure_open_object_comma.json
│   │   ├── n_structure_open_object_open_array.json
│   │   ├── n_structure_open_object_open_string.json
│   │   ├── n_structure_open_object_string_with_apostrophes.json
│   │   ├── n_structure_open_open.json
│   │   ├── n_structure_single_eacute.json
│   │   ├── n_structure_single_star.json
│   │   ├── n_structure_trailing_#.json
│   │   ├── n_structure_uescaped_LF_before_string.json
│   │   ├── n_structure_unclosed_array.json
│   │   ├── n_structure_unclosed_array_partial_null.json
│   │   ├── n_structure_unclosed_array_unfinished_false.json
│   │   ├── n_structure_unclosed_array_unfinished_true.json
│   │   ├── n_structure_unclosed_object.json
│   │   ├── n_structure_unicode-identifier.json
│   │   ├── n_structure_whitespace_U+2060_word_joiner.json
│   │   ├── n_structure_whitespace_formfeed.json
│   │   ├── y_array_arraysWithSpaces.json
│   │   ├── y_array_empty-string.json
│   │   ├── y_array_empty.json
│   │   ├── y_array_ending_with_newline.json
│   │   ├── y_array_false.json
│   │   ├── y_array_heterogeneous.json
│   │   ├── y_array_null.json
│   │   ├── y_array_with_1_and_newline.json
│   │   ├── y_array_with_leading_space.json
│   │   ├── y_array_with_several_null.json
│   │   ├── y_array_with_trailing_space.json
│   │   ├── y_number.json
│   │   ├── y_number_0e+1.json
│   │   ├── y_number_0e1.json
│   │   ├── y_number_after_space.json
│   │   ├── y_number_double_close_to_zero.json
│   │   ├── y_number_int_with_exp.json
│   │   ├── y_number_minus_zero.json
│   │   ├── y_number_negative_int.json
│   │   ├── y_number_negative_one.json
│   │   ├── y_number_negative_zero.json
│   │   ├── y_number_real_capital_e.json
│   │   ├── y_number_real_capital_e_neg_exp.json
│   │   ├── y_number_real_capital_e_pos_exp.json
│   │   ├── y_number_real_exponent.json
│   │   ├── y_number_real_fraction_exponent.json
│   │   ├── y_number_real_neg_exp.json
│   │   ├── y_number_real_pos_exponent.json
│   │   ├── y_number_simple_int.json
│   │   ├── y_number_simple_real.json
│   │   ├── y_object.json
│   │   ├── y_object_basic.json
│   │   ├── y_object_duplicated_key.json
│   │   ├── y_object_duplicated_key_and_value.json
│   │   ├── y_object_empty.json
│   │   ├── y_object_empty_key.json
│   │   ├── y_object_escaped_null_in_key.json
│   │   ├── y_object_extreme_numbers.json
│   │   ├── y_object_long_strings.json
│   │   ├── y_object_simple.json
│   │   ├── y_object_string_unicode.json
│   │   ├── y_object_with_newlines.json
│   │   ├── y_string_1_2_3_bytes_UTF-8_sequences.json
│   │   ├── y_string_accepted_surrogate_pair.json
│   │   ├── y_string_accepted_surrogate_pairs.json
│   │   ├── y_string_allowed_escapes.json
│   │   ├── y_string_backslash_and_u_escaped_zero.json
│   │   ├── y_string_backslash_doublequotes.json
│   │   ├── y_string_comments.json
│   │   ├── y_string_double_escape_a.json
│   │   ├── y_string_double_escape_n.json
│   │   ├── y_string_escaped_control_character.json
│   │   ├── y_string_escaped_noncharacter.json
│   │   ├── y_string_in_array.json
│   │   ├── y_string_in_array_with_leading_space.json
│   │   ├── y_string_last_surrogates_1_and_2.json
│   │   ├── y_string_nbsp_uescaped.json
│   │   ├── y_string_nonCharacterInUTF-8_U+10FFFF.json
│   │   ├── y_string_nonCharacterInUTF-8_U+FFFF.json
│   │   ├── y_string_null_escape.json
│   │   ├── y_string_one-byte-utf-8.json
│   │   ├── y_string_pi.json
│   │   ├── y_string_reservedCharacterInUTF-8_U+1BFFF.json
│   │   ├── y_string_simple_ascii.json
│   │   ├── y_string_space.json
│   │   ├── y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json
│   │   ├── y_string_three-byte-utf-8.json
│   │   ├── y_string_two-byte-utf-8.json
│   │   ├── y_string_u+2028_line_sep.json
│   │   ├── y_string_u+2029_par_sep.json
│   │   ├── y_string_uEscape.json
│   │   ├── y_string_uescaped_newline.json
│   │   ├── y_string_unescaped_char_delete.json
│   │   ├── y_string_unicode.json
│   │   ├── y_string_unicodeEscapedBackslash.json
│   │   ├── y_string_unicode_2.json
│   │   ├── y_string_unicode_U+10FFFE_nonchar.json
│   │   ├── y_string_unicode_U+1FFFE_nonchar.json
│   │   ├── y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json
│   │   ├── y_string_unicode_U+2064_invisible_plus.json
│   │   ├── y_string_unicode_U+FDD0_nonchar.json
│   │   ├── y_string_unicode_U+FFFE_nonchar.json
│   │   ├── y_string_unicode_escaped_double_quote.json
│   │   ├── y_string_utf8.json
│   │   ├── y_string_with_del_character.json
│   │   ├── y_structure_lonely_false.json
│   │   ├── y_structure_lonely_int.json
│   │   ├── y_structure_lonely_negative_real.json
│   │   ├── y_structure_lonely_null.json
│   │   ├── y_structure_lonely_string.json
│   │   ├── y_structure_lonely_true.json
│   │   ├── y_structure_string_empty.json
│   │   ├── y_structure_trailing_newline.json
│   │   ├── y_structure_true_in_array.json
│   │   └── y_structure_whitespace_array.json
│   ├── roundtrip/
│   │   ├── roundtrip01.json
│   │   ├── roundtrip02.json
│   │   ├── roundtrip03.json
│   │   ├── roundtrip04.json
│   │   ├── roundtrip05.json
│   │   ├── roundtrip06.json
│   │   ├── roundtrip07.json
│   │   ├── roundtrip08.json
│   │   ├── roundtrip09.json
│   │   ├── roundtrip10.json
│   │   ├── roundtrip11.json
│   │   ├── roundtrip12.json
│   │   ├── roundtrip13.json
│   │   ├── roundtrip14.json
│   │   ├── roundtrip15.json
│   │   ├── roundtrip16.json
│   │   ├── roundtrip17.json
│   │   ├── roundtrip18.json
│   │   ├── roundtrip19.json
│   │   ├── roundtrip20.json
│   │   ├── roundtrip21.json
│   │   ├── roundtrip22.json
│   │   ├── roundtrip23.json
│   │   ├── roundtrip24.json
│   │   ├── roundtrip25.json
│   │   ├── roundtrip26.json
│   │   └── roundtrip27.json
│   ├── transform/
│   │   ├── number_1.0.json
│   │   ├── number_1.000000000000000005.json
│   │   ├── number_1000000000000000.json
│   │   ├── number_10000000000000000999.json
│   │   ├── number_1e-999.json
│   │   ├── number_1e6.json
│   │   ├── object_key_nfc_nfd.json
│   │   ├── object_key_nfd_nfc.json
│   │   ├── object_same_key_different_values.json
│   │   ├── object_same_key_same_value.json
│   │   ├── object_same_key_unclear_values.json
│   │   ├── string_1_escaped_invalid_codepoint.json
│   │   ├── string_1_invalid_codepoint.json
│   │   ├── string_2_escaped_invalid_codepoints.json
│   │   ├── string_2_invalid_codepoints.json
│   │   ├── string_3_escaped_invalid_codepoints.json
│   │   ├── string_3_invalid_codepoints.json
│   │   └── string_with_escaped_NULL.json
│   └── twitter.json.xz
├── include/
│   └── yyjson/
│       ├── yyjson.c
│       └── yyjson.h
├── integration/
│   ├── client
│   ├── http
│   ├── init
│   ├── requirements.txt
│   ├── run
│   ├── thread
│   ├── typestubs.py
│   └── wsgi.py
├── pyproject.toml
├── pysrc/
│   └── orjson/
│       ├── __init__.py
│       ├── __init__.pyi
│       └── py.typed
├── requirements-lint.txt
├── requirements.txt
├── script/
│   ├── blame-to-header
│   ├── cargo
│   ├── check-pypi
│   ├── check-version
│   ├── debug
│   ├── develop
│   ├── graph
│   ├── install-fedora
│   ├── lint
│   ├── profile
│   ├── pybench
│   ├── pycorrectness
│   ├── pydataclass
│   ├── pyindent
│   ├── pynonstr
│   ├── pynumpy
│   ├── pysort
│   ├── pytest
│   └── valgrind
├── src/
│   ├── alloc.rs
│   ├── deserialize/
│   │   ├── backend/
│   │   │   ├── ffi.rs
│   │   │   ├── mod.rs
│   │   │   └── yyjson.rs
│   │   ├── cache.rs
│   │   ├── deserializer.rs
│   │   ├── error.rs
│   │   ├── input.rs
│   │   ├── mod.rs
│   │   └── pyobject.rs
│   ├── exception.rs
│   ├── ffi/
│   │   ├── atomiculong.rs
│   │   ├── buffer.rs
│   │   ├── bytes.rs
│   │   ├── compat.rs
│   │   ├── fragment.rs
│   │   ├── mod.rs
│   │   ├── pyboolref.rs
│   │   ├── pybytearrayref.rs
│   │   ├── pybytesref.rs
│   │   ├── pydictref.rs
│   │   ├── pyfloatref.rs
│   │   ├── pyfragmentref.rs
│   │   ├── pyintref.rs
│   │   ├── pylistref.rs
│   │   ├── pymemoryview.rs
│   │   ├── pynoneref.rs
│   │   ├── pystrref/
│   │   │   ├── avx512.rs
│   │   │   ├── mod.rs
│   │   │   ├── object.rs
│   │   │   ├── pyunicode_new.rs
│   │   │   └── scalar.rs
│   │   ├── pytupleref.rs
│   │   ├── pyuuidref.rs
│   │   └── utf8.rs
│   ├── lib.rs
│   ├── opt.rs
│   ├── serialize/
│   │   ├── buffer.rs
│   │   ├── error.rs
│   │   ├── mod.rs
│   │   ├── obtype.rs
│   │   ├── per_type/
│   │   │   ├── dataclass.rs
│   │   │   ├── datetime.rs
│   │   │   ├── datetimelike.rs
│   │   │   ├── default.rs
│   │   │   ├── dict.rs
│   │   │   ├── float.rs
│   │   │   ├── fragment.rs
│   │   │   ├── int.rs
│   │   │   ├── list.rs
│   │   │   ├── mod.rs
│   │   │   ├── none.rs
│   │   │   ├── numpy.rs
│   │   │   ├── pybool.rs
│   │   │   ├── pyenum.rs
│   │   │   ├── unicode.rs
│   │   │   └── uuid.rs
│   │   ├── serializer.rs
│   │   ├── state.rs
│   │   └── writer/
│   │       ├── byteswriter.rs
│   │       ├── formatter.rs
│   │       ├── json.rs
│   │       ├── mod.rs
│   │       ├── num.rs
│   │       └── str/
│   │           ├── avx512.rs
│   │           ├── escape.rs
│   │           ├── generic.rs
│   │           ├── mod.rs
│   │           ├── scalar.rs
│   │           └── sse2.rs
│   ├── typeref.rs
│   └── util.rs
└── test/
    ├── __init__.py
    ├── requirements.txt
    ├── test_api.py
    ├── test_append_newline.py
    ├── test_buffer.py
    ├── test_canonical.py
    ├── test_circular.py
    ├── test_dataclass.py
    ├── test_datetime.py
    ├── test_default.py
    ├── test_dict.py
    ├── test_enum.py
    ├── test_error.py
    ├── test_escape.py
    ├── test_fake.py
    ├── test_fixture.py
    ├── test_fragment.py
    ├── test_indent.py
    ├── test_issue221.py
    ├── test_issue331.py
    ├── test_jsonchecker.py
    ├── test_memory.py
    ├── test_non_str_keys.py
    ├── test_numpy.py
    ├── test_parsing.py
    ├── test_recursion.py
    ├── test_reentrant.py
    ├── test_roundtrip.py
    ├── test_sort_keys.py
    ├── test_subclass.py
    ├── test_transform.py
    ├── test_type.py
    ├── test_typeddict.py
    ├── test_uuid.py
    └── util.py
Download .txt
Showing preview only (249K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2696 symbols across 106 files)

FILE: bench/benchmark_dumps.py
  function test_dumps (line 13) | def test_dumps(benchmark, fixture, library):

FILE: bench/benchmark_loads.py
  function test_loads (line 13) | def test_loads(benchmark, fixture, library):

FILE: bench/data.py
  function json_dumps (line 14) | def json_dumps(obj):

FILE: bench/util.py
  function read_fixture (line 14) | def read_fixture(filename: str) -> bytes:

FILE: build.rs
  function main (line 4) | fn main() {
  function not_supported (line 80) | fn not_supported(flavor: &str) {

FILE: include/yyjson/yyjson.c
  function yyjson_version (line 58) | uint32_t yyjson_version(void) {
  function static_inline (line 386) | static_inline bool read_flag_eq(yyjson_read_flag flg, yyjson_read_flag c...
  function static_inline (line 397) | static_inline bool write_flag_eq(yyjson_write_flag flg, yyjson_write_fla...
  type f32 (line 490) | typedef float       f32;
  type f64 (line 491) | typedef double      f64;
  type i8 (line 492) | typedef int8_t      i8;
  type u8 (line 493) | typedef uint8_t     u8;
  type i16 (line 494) | typedef int16_t     i16;
  type u16 (line 495) | typedef uint16_t    u16;
  type i32 (line 496) | typedef int32_t     i32;
  type u32 (line 497) | typedef uint32_t    u32;
  type i64 (line 498) | typedef int64_t     i64;
  type u64 (line 499) | typedef uint64_t    u64;
  type usize (line 500) | typedef size_t      usize;
  type __int128 (line 504) | __extension__ typedef __int128          i128;
  type u128 (line 505) | __extension__ typedef unsigned __int128 u128;
  type v16 (line 509) | typedef struct v16 { char c[2]; } v16;
  type v32 (line 510) | typedef struct v32 { char c[4]; } v32;
  type v64 (line 511) | typedef struct v64 { char c[8]; } v64;
  type v16_uni (line 514) | typedef union v16_uni { v16 v; u16 u; } v16_uni;
  type v32_uni (line 515) | typedef union v32_uni { v32 v; u32 u; } v32_uni;
  type v64_uni (line 516) | typedef union v64_uni { v64 v; u64 u; } v64_uni;
  function static_inline (line 528) | static_inline void byte_copy_2(void *dst, const void *src) {
  function static_inline (line 532) | static_inline void byte_copy_4(void *dst, const void *src) {
  function static_inline (line 536) | static_inline void byte_copy_8(void *dst, const void *src) {
  function static_inline (line 540) | static_inline void byte_copy_16(void *dst, const void *src) {
  function static_inline (line 544) | static_inline void byte_move_2(void *dst, const void *src) {
  function static_inline (line 548) | static_inline void byte_move_4(void *dst, const void *src) {
  function static_inline (line 552) | static_inline void byte_move_8(void *dst, const void *src) {
  function static_inline (line 556) | static_inline void byte_move_16(void *dst, const void *src) {
  function static_inline (line 560) | static_inline bool byte_match_2(void *buf, const char *pat) {
  function static_inline (line 566) | static_inline bool byte_match_4(void *buf, const char *pat) {
  function static_inline (line 574) | static_inline u16 byte_load_2(const void *src) {
  function static_inline (line 581) | static_inline u32 byte_load_3(const void *src) {
  function static_inline (line 590) | static_inline u32 byte_load_4(const void *src) {
  function static_inline (line 603) | static_inline void byte_copy_2(void *dst, const void *src) {
  function static_inline (line 607) | static_inline void byte_copy_4(void *dst, const void *src) {
  function static_inline (line 611) | static_inline void byte_copy_8(void *dst, const void *src) {
  function static_inline (line 615) | static_inline void byte_copy_16(void *dst, const void *src) {
  function static_inline (line 619) | static_inline void byte_move_2(void *dst, const void *src) {
  function static_inline (line 625) | static_inline void byte_move_4(void *dst, const void *src) {
  function static_inline (line 631) | static_inline void byte_move_8(void *dst, const void *src) {
  function static_inline (line 637) | static_inline void byte_move_16(void *dst, const void *src) {
  function static_inline (line 647) | static_inline bool byte_match_2(void *buf, const char *pat) {
  function static_inline (line 654) | static_inline bool byte_match_4(void *buf, const char *pat) {
  function static_inline (line 661) | static_inline u16 byte_load_2(const void *src) {
  function static_inline (line 667) | static_inline u32 byte_load_3(const void *src) {
  function static_inline (line 675) | static_inline u32 byte_load_4(const void *src) {
  function static_inline (line 691) | static_inline f64 f64_from_raw(u64 u) {
  function static_inline (line 699) | static_inline u64 f64_to_raw(f64 f) {
  function static_inline (line 707) | static_inline u64 f64_raw_get_inf(bool sign) {
  function static_inline (line 718) | static_inline u64 f64_raw_get_nan(bool sign) {
  function static_inline (line 735) | static_inline f64 normalized_u64_to_f64(u64 val) {
  function static_inline (line 752) | static_inline bool size_add_is_overflow(usize size, usize add) {
  function static_inline (line 757) | static_inline bool size_is_pow2(usize size) {
  function static_inline (line 762) | static_inline usize size_align_up(usize size, usize align) {
  function static_inline (line 771) | static_inline usize size_align_down(usize size, usize align) {
  function static_inline (line 780) | static_inline void *mem_align_up(void *mem, usize align) {
  function static_inline (line 796) | static_inline u32 u64_lz_bits(u64 v) {
  function static_inline (line 831) | static_inline u32 u64_tz_bits(u64 v) {
  function static_inline (line 868) | static_inline void u128_mul(u64 a, u64 b, u64 *hi, u64 *lo) {
  function static_inline (line 891) | static_inline void u128_mul_add(u64 a, u64 b, u64 c, u64 *hi, u64 *lo) {
  function static_inline (line 921) | static_inline FILE *fopen_safe(const char *path, const char *mode) {
  function static_inline (line 931) | static_inline FILE *fopen_readonly(const char *path) {
  function static_inline (line 935) | static_inline FILE *fopen_writeonly(const char *path) {
  function static_inline (line 939) | static_inline usize fread_safe(void *buf, usize size, FILE *file) {
  function default_free (line 962) | static void default_free(void *ctx, void *ptr) {
  function null_free (line 990) | static void null_free(void *ctx, void *ptr) {
  type pool_chunk (line 1011) | typedef struct pool_chunk {
  type pool_ctx (line 1018) | typedef struct pool_ctx {
  function static_inline (line 1025) | static_inline void pool_size_align(usize *size) {
  function pool_free (line 1061) | static void pool_free(void *ctx_ptr, void *ptr) {
  function yyjson_alc_pool_init (line 1134) | bool yyjson_alc_pool_init(yyjson_alc *alc, void *buf, usize size) {
  type dyn_chunk (line 1171) | typedef struct dyn_chunk {
  type dyn_ctx (line 1178) | typedef struct {
  function static_inline (line 1184) | static_inline bool dyn_size_align(usize *size) {
  function static_inline (line 1193) | static_inline void dyn_chunk_list_remove(dyn_chunk *list, dyn_chunk *chu...
  function static_inline (line 1206) | static_inline void dyn_chunk_list_add(dyn_chunk *list, dyn_chunk *chunk) {
  function dyn_free (line 1269) | static void dyn_free(void *ctx_ptr, void *ptr) {
  function yyjson_alc (line 1284) | yyjson_alc *yyjson_alc_dyn_new(void) {
  function yyjson_alc_dyn_free (line 1298) | void yyjson_alc_dyn_free(yyjson_alc *alc) {
  function static_inline (line 1320) | static_inline void unsafe_yyjson_str_pool_release(yyjson_str_pool *pool,
  function static_inline (line 1330) | static_inline void unsafe_yyjson_val_pool_release(yyjson_val_pool *pool,
  function unsafe_yyjson_str_pool_grow (line 1340) | bool unsafe_yyjson_str_pool_grow(yyjson_str_pool *pool,
  function unsafe_yyjson_val_pool_grow (line 1367) | bool unsafe_yyjson_val_pool_grow(yyjson_val_pool *pool,
  function yyjson_mut_doc_set_str_pool_size (line 1394) | bool yyjson_mut_doc_set_str_pool_size(yyjson_mut_doc *doc, size_t len) {
  function yyjson_mut_doc_set_val_pool_size (line 1401) | bool yyjson_mut_doc_set_val_pool_size(yyjson_mut_doc *doc, size_t count) {
  function yyjson_mut_doc_free (line 1408) | void yyjson_mut_doc_free(yyjson_mut_doc *doc) {
  function yyjson_mut_doc (line 1418) | yyjson_mut_doc *yyjson_mut_doc_new(const yyjson_alc *alc) {
  function yyjson_mut_doc (line 1433) | yyjson_mut_doc *yyjson_doc_mut_copy(yyjson_doc *doc, const yyjson_alc *a...
  function yyjson_mut_doc (line 1449) | yyjson_mut_doc *yyjson_mut_doc_mut_copy(yyjson_mut_doc *doc,
  function yyjson_mut_val (line 1468) | yyjson_mut_val *yyjson_val_mut_copy(yyjson_mut_doc *m_doc,
  function yyjson_mut_val (line 1535) | static yyjson_mut_val *unsafe_yyjson_mut_val_mut_copy(yyjson_mut_doc *m_...
  function yyjson_mut_val (line 1584) | yyjson_mut_val *yyjson_mut_val_mut_copy(yyjson_mut_doc *doc,
  function yyjson_mut_stat (line 1591) | static void yyjson_mut_stat(yyjson_mut_val *val,
  function usize (line 1616) | static usize yyjson_imut_copy(yyjson_val **val_ptr, char **buf_ptr,
  function yyjson_doc (line 1656) | yyjson_doc *yyjson_mut_doc_imut_copy(yyjson_mut_doc *mdoc,
  function yyjson_doc (line 1662) | yyjson_doc *yyjson_mut_val_imut_copy(yyjson_mut_val *mval,
  function static_inline (line 1703) | static_inline bool unsafe_yyjson_num_equals(void *lhs, void *rhs) {
  function static_inline (line 1718) | static_inline bool unsafe_yyjson_str_equals(void *lhs, void *rhs) {
  function unsafe_yyjson_equals (line 1725) | bool unsafe_yyjson_equals(yyjson_val *lhs, yyjson_val *rhs) {
  function unsafe_yyjson_mut_equals (line 1780) | bool unsafe_yyjson_mut_equals(yyjson_mut_val *lhs, yyjson_mut_val *rhs) {
  function static_inline (line 1853) | static_inline const char *ptr_next_token(const char **ptr, const char *end,
  function static_inline (line 1891) | static_inline bool ptr_token_to_idx(const char *cur, usize len, usize *i...
  function static_inline (line 1921) | static_inline bool ptr_token_eq(void *key,
  function static_inline (line 1948) | static_inline yyjson_val *ptr_arr_get(yyjson_val *arr, const char *token,
  function static_inline (line 1971) | static_inline yyjson_val *ptr_obj_get(yyjson_val *obj, const char *token,
  function static_inline (line 1992) | static_inline yyjson_mut_val *ptr_mut_arr_get(yyjson_mut_val *arr,
  function static_inline (line 2022) | static_inline yyjson_mut_val *ptr_mut_obj_get(yyjson_mut_val *obj,
  function static_inline (line 2048) | static_inline yyjson_mut_val *ptr_new_key(const char *token,
  function yyjson_val (line 2085) | yyjson_val *unsafe_yyjson_ptr_getx(yyjson_val *val,
  function yyjson_mut_val (line 2109) | yyjson_mut_val *unsafe_yyjson_mut_ptr_getx(yyjson_mut_val *val,
  function unsafe_yyjson_mut_ptr_putx (line 2145) | bool unsafe_yyjson_mut_ptr_putx(yyjson_mut_val *val,
  function yyjson_mut_val (line 2284) | yyjson_mut_val *unsafe_yyjson_mut_ptr_replacex(
  function yyjson_mut_val (line 2305) | yyjson_mut_val *unsafe_yyjson_mut_ptr_removex(yyjson_mut_val *val,
  type patch_op (line 2341) | typedef enum patch_op {
  function patch_op (line 2351) | static patch_op patch_op_get(yyjson_val *op) {
  function yyjson_mut_val (line 2403) | yyjson_mut_val *yyjson_patch(yyjson_mut_doc *doc,
  function yyjson_mut_val (line 2524) | yyjson_mut_val *yyjson_mut_patch(yyjson_mut_doc *doc,
  function yyjson_mut_val (line 2661) | yyjson_mut_val *yyjson_merge_patch(yyjson_mut_doc *doc,
  function yyjson_mut_val (line 2713) | yyjson_mut_val *yyjson_mut_merge_patch(yyjson_mut_doc *doc,
  function static_inline (line 3470) | static_inline void pow10_table_get_sig(i32 exp10, u64 *hi, u64 *lo) {
  function static_inline (line 3479) | static_inline void pow10_table_get_exp(i32 exp10, i32 *exp2) {
  type u8 (line 3494) | typedef u8 char_type;
  function static_inline (line 3557) | static_inline bool char_is_type(u8 c, char_type type) {
  function static_inline (line 3562) | static_inline bool char_is_space(u8 c) {
  function static_inline (line 3567) | static_inline bool char_is_space_or_comment(u8 c) {
  function static_inline (line 3572) | static_inline bool char_is_number(u8 c) {
  function static_inline (line 3577) | static_inline bool char_is_container(u8 c) {
  function static_inline (line 3582) | static_inline bool char_is_ascii_stop(u8 c) {
  function static_inline (line 3588) | static_inline bool char_is_line_end(u8 c) {
  function static_inline (line 3593) | static_inline bool char_is_hex(u8 c) {
  type u8 (line 3604) | typedef u8 digi_type;
  function static_inline (line 3645) | static_inline bool digi_is_type(u8 d, digi_type type) {
  function static_inline (line 3650) | static_inline bool digi_is_sign(u8 d) {
  function static_inline (line 3655) | static_inline bool digi_is_nonzero(u8 d) {
  function static_inline (line 3660) | static_inline bool digi_is_digit(u8 d) {
  function static_inline (line 3665) | static_inline bool digi_is_exp(u8 d) {
  function static_inline (line 3670) | static_inline bool digi_is_fp(u8 d) {
  function static_inline (line 3675) | static_inline bool digi_is_digit_or_fp(u8 d) {
  function static_inline (line 3736) | static_inline bool read_hex_u16(const u8 *cur, u16 *val) {
  function static_inline (line 3756) | static_inline bool read_true(u8 **ptr, yyjson_val *val) {
  function static_inline (line 3768) | static_inline bool read_false(u8 **ptr, yyjson_val *val) {
  function static_inline (line 3780) | static_inline bool read_null(u8 **ptr, yyjson_val *val) {
  function static_inline (line 3792) | static_inline bool read_inf(bool sign, u8 **ptr, u8 **pre, yyjson_val *v...
  function static_inline (line 3825) | static_inline bool read_nan(bool sign, u8 **ptr, u8 **pre, yyjson_val *v...
  function static_noinline (line 3850) | static_noinline bool read_number_raw(u8 **ptr,
  function static_noinline (line 3927) | static_noinline bool skip_spaces_and_comments(u8 **ptr) {
  function static_inline (line 3968) | static_inline bool is_truncated_str(u8 *cur, u8 *end,
  function static_noinline (line 3988) | static_noinline bool is_truncated_end(u8 *hdr, u8 *cur, u8 *end,
  type bigint (line 4105) | typedef struct bigint {
  function static_inline (line 4115) | static_inline void bigint_add_u64(bigint *big, u64 val) {
  function static_inline (line 4136) | static_inline void bigint_mul_u64(bigint *big, u64 val) {
  function static_inline (line 4155) | static_inline void bigint_mul_pow2(bigint *big, u32 exp) {
  function static_inline (line 4183) | static_inline void bigint_mul_pow10(bigint *big, i32 exp) {
  function static_inline (line 4196) | static_inline i32 bigint_cmp(bigint *a, bigint *b) {
  function static_inline (line 4214) | static_inline void bigint_set_u64(bigint *big, u64 val) {
  function static_noinline (line 4220) | static_noinline void bigint_set_buf(bigint *big, u64 sig, i32 *exp,
  type diy_fp (line 4278) | typedef struct diy_fp {
  function static_inline (line 4286) | static_inline diy_fp diy_fp_get_cached_pow10(i32 exp10) {
  function static_inline (line 4296) | static_inline diy_fp diy_fp_mul(diy_fp fp, diy_fp fp2) {
  function static_inline (line 4305) | static_inline u64 diy_fp_to_ieee_raw(diy_fp fp) {
  function static_inline (line 4358) | static_inline bool read_number(u8 **ptr,
  function static_inline (line 4944) | static_inline bool read_number(u8 **ptr,
  function static_inline (line 5130) | static_inline bool read_string(u8 **ptr,
  function static_noinline (line 5622) | static_noinline yyjson_doc *read_root_single(u8 *hdr,
  function static_inline (line 5724) | static_inline yyjson_doc *read_root_minify(u8 *hdr,
  function static_inline (line 6091) | static_inline yyjson_doc *read_root_pretty(u8 *hdr,
  function yyjson_doc (line 6497) | yyjson_doc *yyjson_read_opts(char *dat,
  function yyjson_doc (line 6555) | yyjson_doc *yyjson_read_file(const char *path,
  function yyjson_doc (line 6583) | yyjson_doc *yyjson_read_fp(FILE *file,
  function static_inline (line 6792) | static_inline u8 *write_u32_len_8(u32 val, u8 *buf) {
  function static_inline (line 6807) | static_inline u8 *write_u32_len_4(u32 val, u8 *buf) {
  function static_inline (line 6816) | static_inline u8 *write_u32_len_1_8(u32 val, u8 *buf) {
  function static_inline (line 6863) | static_inline u8 *write_u64_len_5_8(u32 val, u8 *buf) {
  function static_inline (line 6895) | static_inline u8 *write_u64(u64 val, u8 *buf) {
  function static_inline (line 6946) | static_inline u8 *write_u64_len_1_to_16(u64 val, u8 *buf) {
  function static_inline (line 6962) | static_inline u8 *write_u64_len_1_to_17(u64 val, u8 *buf) {
  function static_inline (line 6992) | static_inline u8 *write_u64_len_15_to_17_trim(u8 *buf, u64 sig) {
  function static_inline (line 7063) | static_inline u8 *write_f64_exp(i32 exp, u8 *buf) {
  function static_inline (line 7081) | static_inline u64 round_to_odd(u64 hi, u64 lo, u64 cp) {
  function static_inline (line 7112) | static_inline void f64_bin_to_dec(u64 sig_raw, u32 exp_raw,
  function static_inline (line 7181) | static_inline u8 *write_f64_raw(u8 *buf, u64 raw, yyjson_write_flag flg) {
  function static_inline (line 7330) | static_inline u8 *write_f64_raw(u8 *buf, u64 raw, yyjson_write_flag flg) {
  function static_inline (line 7396) | static_inline u8 *write_number(u8 *cur, yyjson_val *val,
  type u8 (line 7417) | typedef u8 char_enc_type;
  function static_inline (line 7653) | static_inline const char_enc_type *get_enc_table_with_flag(
  function static_inline (line 7671) | static_inline u8 *write_raw(u8 *cur, const u8 *raw, usize raw_len) {
  function static_inline (line 7683) | static_inline u8 *write_string_noesc(u8 *cur, const u8 *str, usize str_l...
  function static_inline (line 7715) | static_inline u8 *write_string(u8 *cur, bool esc, bool inv,
  function static_inline (line 8008) | static_inline u8 *write_null(u8 *cur) {
  function static_inline (line 8015) | static_inline u8 *write_bool(u8 *cur, bool val) {
  function static_inline (line 8028) | static_inline u8 *write_indent(u8 *cur, usize level, usize spaces) {
  function write_dat_to_fp (line 8037) | static bool write_dat_to_fp(FILE *fp, u8 *dat, usize len,
  function write_dat_to_file (line 8048) | static bool write_dat_to_file(const char *path, u8 *dat, usize len,
  type yyjson_write_ctx (line 8080) | typedef struct yyjson_write_ctx {
  function static_inline (line 8084) | static_inline void yyjson_write_ctx_set(yyjson_write_ctx *ctx,
  function static_inline (line 8089) | static_inline void yyjson_write_ctx_get(yyjson_write_ctx *ctx,
  function static_inline (line 8097) | static_inline u8 *yyjson_write_single(yyjson_val *val,
  function static_inline (line 8208) | static_inline u8 *yyjson_write_minify(const yyjson_val *root,
  function static_inline (line 8392) | static_inline u8 *yyjson_write_pretty(const yyjson_val *root,
  function yyjson_val_write_file (line 8636) | bool yyjson_val_write_file(const char *path,
  function yyjson_val_write_fp (line 8662) | bool yyjson_val_write_fp(FILE *fp,
  function yyjson_write_file (line 8688) | bool yyjson_write_file(const char *path,
  function yyjson_write_fp (line 8697) | bool yyjson_write_fp(FILE *fp,
  type yyjson_mut_write_ctx (line 8712) | typedef struct yyjson_mut_write_ctx {
  function static_inline (line 8717) | static_inline void yyjson_mut_write_ctx_set(yyjson_mut_write_ctx *ctx,
  function static_inline (line 8724) | static_inline void yyjson_mut_write_ctx_get(yyjson_mut_write_ctx *ctx,
  function static_inline (line 8734) | static_inline usize yyjson_mut_doc_estimated_val_num(
  function static_inline (line 8749) | static_inline u8 *yyjson_mut_write_single(yyjson_mut_val *val,
  function static_inline (line 8759) | static_inline u8 *yyjson_mut_write_minify(const yyjson_mut_val *root,
  function static_inline (line 8949) | static_inline u8 *yyjson_mut_write_pretty(const yyjson_mut_val *root,
  function yyjson_mut_val_write_file (line 9219) | bool yyjson_mut_val_write_file(const char *path,
  function yyjson_mut_val_write_fp (line 9245) | bool yyjson_mut_val_write_fp(FILE *fp,
  function yyjson_mut_write_file (line 9271) | bool yyjson_mut_write_file(const char *path,
  function yyjson_mut_write_fp (line 9280) | bool yyjson_mut_write_fp(FILE *fp,

FILE: include/yyjson/yyjson.h
  type __INT64_TYPE__ (line 431) | typedef __INT64_TYPE__  int64_t;
  type __UINT64_TYPE__ (line 432) | typedef __UINT64_TYPE__ uint64_t;
  type __int64 (line 444) | typedef __int64             int64_t;
  type yyjson_type (line 551) | typedef uint8_t yyjson_type;
  type yyjson_subtype (line 570) | typedef uint8_t yyjson_subtype;
  type yyjson_alc (line 618) | typedef struct yyjson_alc {
  type yyjson_doc (line 701) | typedef struct yyjson_doc yyjson_doc;
  type yyjson_val (line 708) | typedef struct yyjson_val yyjson_val;
  type yyjson_mut_doc (line 715) | typedef struct yyjson_mut_doc yyjson_mut_doc;
  type yyjson_mut_val (line 722) | typedef struct yyjson_mut_val yyjson_mut_val;
  type yyjson_read_flag (line 731) | typedef uint32_t yyjson_read_flag;
  type yyjson_read_code (line 790) | typedef uint32_t yyjson_read_code;
  type yyjson_read_err (line 838) | typedef struct yyjson_read_err {
  function yyjson_api_inline (line 936) | yyjson_api_inline yyjson_doc *yyjson_read(const char *dat,
  function yyjson_api_inline (line 981) | yyjson_api_inline size_t yyjson_read_max_memory_usage(size_t len,
  function yyjson_api_inline (line 1049) | yyjson_api_inline const char *yyjson_mut_read_number(const char *dat,
  type yyjson_write_flag (line 1063) | typedef uint32_t yyjson_write_flag;
  type yyjson_write_code (line 1106) | typedef uint32_t yyjson_write_code;
  type yyjson_write_err (line 1133) | typedef struct yyjson_write_err {
  function yyjson_api_inline (line 1239) | yyjson_api_inline char *yyjson_write(const yyjson_doc *doc,
  function yyjson_api_inline (line 1343) | yyjson_api_inline char *yyjson_mut_write(const yyjson_mut_doc *doc,
  function yyjson_api_inline (line 1448) | yyjson_api_inline char *yyjson_val_write(const yyjson_val *val,
  function yyjson_api_inline (line 1550) | yyjson_api_inline char *yyjson_mut_val_write(const yyjson_mut_val *val,
  type yyjson_arr_iter (line 1810) | typedef struct yyjson_arr_iter {
  type yyjson_obj_iter (line 1934) | typedef struct yyjson_obj_iter {
  type yyjson_mut_arr_iter (line 2490) | typedef struct yyjson_mut_arr_iter {
  type yyjson_mut_obj_iter (line 3292) | typedef struct yyjson_mut_obj_iter {
  type yyjson_ptr_code (line 3801) | typedef uint32_t yyjson_ptr_code;
  type yyjson_ptr_err (line 3825) | typedef struct yyjson_ptr_err {
  type yyjson_ptr_ctx (line 3853) | typedef struct yyjson_ptr_ctx {
  type yyjson_patch_code (line 4386) | typedef uint32_t yyjson_patch_code;
  type yyjson_patch_err (line 4413) | typedef struct yyjson_patch_err {
  type yyjson_val_uni (line 4484) | typedef union yyjson_val_uni {
  type yyjson_val (line 4496) | struct yyjson_val {
  type yyjson_doc (line 4501) | struct yyjson_doc {
  function yyjson_api_inline (line 4535) | yyjson_api_inline bool unsafe_yyjson_is_str_noesc(const char *str, size_...
  function yyjson_api_inline (line 4572) | yyjson_api_inline yyjson_type unsafe_yyjson_get_type(void *val) {
  function yyjson_api_inline (line 4577) | yyjson_api_inline yyjson_subtype unsafe_yyjson_get_subtype(void *val) {
  function yyjson_api_inline (line 4582) | yyjson_api_inline uint8_t unsafe_yyjson_get_tag(void *val) {
  function yyjson_api_inline (line 4587) | yyjson_api_inline bool unsafe_yyjson_is_raw(void *val) {
  function yyjson_api_inline (line 4591) | yyjson_api_inline bool unsafe_yyjson_is_null(void *val) {
  function yyjson_api_inline (line 4595) | yyjson_api_inline bool unsafe_yyjson_is_bool(void *val) {
  function yyjson_api_inline (line 4599) | yyjson_api_inline bool unsafe_yyjson_is_num(void *val) {
  function yyjson_api_inline (line 4603) | yyjson_api_inline bool unsafe_yyjson_is_str(void *val) {
  function yyjson_api_inline (line 4607) | yyjson_api_inline bool unsafe_yyjson_is_arr(void *val) {
  function yyjson_api_inline (line 4611) | yyjson_api_inline bool unsafe_yyjson_is_obj(void *val) {
  function yyjson_api_inline (line 4615) | yyjson_api_inline bool unsafe_yyjson_is_ctn(void *val) {
  function yyjson_api_inline (line 4620) | yyjson_api_inline bool unsafe_yyjson_is_uint(void *val) {
  function yyjson_api_inline (line 4625) | yyjson_api_inline bool unsafe_yyjson_is_sint(void *val) {
  function yyjson_api_inline (line 4630) | yyjson_api_inline bool unsafe_yyjson_is_int(void *val) {
  function yyjson_api_inline (line 4636) | yyjson_api_inline bool unsafe_yyjson_is_real(void *val) {
  function yyjson_api_inline (line 4641) | yyjson_api_inline bool unsafe_yyjson_is_true(void *val) {
  function yyjson_api_inline (line 4646) | yyjson_api_inline bool unsafe_yyjson_is_false(void *val) {
  function yyjson_api_inline (line 4651) | yyjson_api_inline bool unsafe_yyjson_arr_is_flat(yyjson_val *val) {
  function yyjson_api_inline (line 4657) | yyjson_api_inline const char *unsafe_yyjson_get_raw(void *val) {
  function yyjson_api_inline (line 4661) | yyjson_api_inline bool unsafe_yyjson_get_bool(void *val) {
  function yyjson_api_inline (line 4666) | yyjson_api_inline uint64_t unsafe_yyjson_get_uint(void *val) {
  function yyjson_api_inline (line 4670) | yyjson_api_inline int64_t unsafe_yyjson_get_sint(void *val) {
  function yyjson_api_inline (line 4674) | yyjson_api_inline int unsafe_yyjson_get_int(void *val) {
  function yyjson_api_inline (line 4678) | yyjson_api_inline double unsafe_yyjson_get_real(void *val) {
  function yyjson_api_inline (line 4682) | yyjson_api_inline double unsafe_yyjson_get_num(void *val) {
  function yyjson_api_inline (line 4704) | yyjson_api_inline const char *unsafe_yyjson_get_str(void *val) {
  function yyjson_api_inline (line 4708) | yyjson_api_inline size_t unsafe_yyjson_get_len(void *val) {
  function yyjson_api_inline (line 4712) | yyjson_api_inline yyjson_val *unsafe_yyjson_get_first(yyjson_val *ctn) {
  function yyjson_api_inline (line 4716) | yyjson_api_inline yyjson_val *unsafe_yyjson_get_next(yyjson_val *val) {
  function yyjson_api_inline (line 4723) | yyjson_api_inline bool unsafe_yyjson_equals_strn(void *val, const char *...
  function yyjson_api_inline (line 4729) | yyjson_api_inline bool unsafe_yyjson_equals_str(void *val, const char *s...
  function yyjson_api_inline (line 4733) | yyjson_api_inline void unsafe_yyjson_set_type(void *val, yyjson_type type,
  function yyjson_api_inline (line 4741) | yyjson_api_inline void unsafe_yyjson_set_len(void *val, size_t len) {
  function yyjson_api_inline (line 4747) | yyjson_api_inline void unsafe_yyjson_inc_len(void *val) {
  function yyjson_api_inline (line 4753) | yyjson_api_inline void unsafe_yyjson_set_raw(void *val, const char *raw,
  function yyjson_api_inline (line 4760) | yyjson_api_inline void unsafe_yyjson_set_null(void *val) {
  function yyjson_api_inline (line 4765) | yyjson_api_inline void unsafe_yyjson_set_bool(void *val, bool num) {
  function yyjson_api_inline (line 4771) | yyjson_api_inline void unsafe_yyjson_set_uint(void *val, uint64_t num) {
  function yyjson_api_inline (line 4777) | yyjson_api_inline void unsafe_yyjson_set_sint(void *val, int64_t num) {
  function yyjson_api_inline (line 4783) | yyjson_api_inline void unsafe_yyjson_set_real(void *val, double num) {
  function yyjson_api_inline (line 4789) | yyjson_api_inline void unsafe_yyjson_set_str(void *val, const char *str) {
  function yyjson_api_inline (line 4798) | yyjson_api_inline void unsafe_yyjson_set_strn(void *val, const char *str,
  function yyjson_api_inline (line 4805) | yyjson_api_inline void unsafe_yyjson_set_arr(void *val, size_t size) {
  function yyjson_api_inline (line 4810) | yyjson_api_inline void unsafe_yyjson_set_obj(void *val, size_t size) {
  function yyjson_api_inline (line 4821) | yyjson_api_inline yyjson_val *yyjson_doc_get_root(yyjson_doc *doc) {
  function yyjson_api_inline (line 4825) | yyjson_api_inline size_t yyjson_doc_get_read_size(yyjson_doc *doc) {
  function yyjson_api_inline (line 4829) | yyjson_api_inline size_t yyjson_doc_get_val_count(yyjson_doc *doc) {
  function yyjson_api (line 4833) | yyjson_api void yyjson_doc_free(yyjson_doc *doc) {
  function yyjson_api_inline (line 4848) | yyjson_api_inline bool yyjson_is_raw(yyjson_val *val) {
  function yyjson_api_inline (line 4852) | yyjson_api_inline bool yyjson_is_null(yyjson_val *val) {
  function yyjson_api_inline (line 4856) | yyjson_api_inline bool yyjson_is_true(yyjson_val *val) {
  function yyjson_api_inline (line 4860) | yyjson_api_inline bool yyjson_is_false(yyjson_val *val) {
  function yyjson_api_inline (line 4864) | yyjson_api_inline bool yyjson_is_bool(yyjson_val *val) {
  function yyjson_api_inline (line 4868) | yyjson_api_inline bool yyjson_is_uint(yyjson_val *val) {
  function yyjson_api_inline (line 4872) | yyjson_api_inline bool yyjson_is_sint(yyjson_val *val) {
  function yyjson_api_inline (line 4876) | yyjson_api_inline bool yyjson_is_int(yyjson_val *val) {
  function yyjson_api_inline (line 4880) | yyjson_api_inline bool yyjson_is_real(yyjson_val *val) {
  function yyjson_api_inline (line 4884) | yyjson_api_inline bool yyjson_is_num(yyjson_val *val) {
  function yyjson_api_inline (line 4888) | yyjson_api_inline bool yyjson_is_str(yyjson_val *val) {
  function yyjson_api_inline (line 4892) | yyjson_api_inline bool yyjson_is_arr(yyjson_val *val) {
  function yyjson_api_inline (line 4896) | yyjson_api_inline bool yyjson_is_obj(yyjson_val *val) {
  function yyjson_api_inline (line 4900) | yyjson_api_inline bool yyjson_is_ctn(yyjson_val *val) {
  function yyjson_api_inline (line 4910) | yyjson_api_inline yyjson_type yyjson_get_type(yyjson_val *val) {
  function yyjson_api_inline (line 4914) | yyjson_api_inline yyjson_subtype yyjson_get_subtype(yyjson_val *val) {
  function yyjson_api_inline (line 4918) | yyjson_api_inline uint8_t yyjson_get_tag(yyjson_val *val) {
  function yyjson_api_inline (line 4922) | yyjson_api_inline const char *yyjson_get_type_desc(yyjson_val *val) {
  function yyjson_api_inline (line 4939) | yyjson_api_inline const char *yyjson_get_raw(yyjson_val *val) {
  function yyjson_api_inline (line 4943) | yyjson_api_inline bool yyjson_get_bool(yyjson_val *val) {
  function yyjson_api_inline (line 4947) | yyjson_api_inline uint64_t yyjson_get_uint(yyjson_val *val) {
  function yyjson_api_inline (line 4951) | yyjson_api_inline int64_t yyjson_get_sint(yyjson_val *val) {
  function yyjson_api_inline (line 4955) | yyjson_api_inline int yyjson_get_int(yyjson_val *val) {
  function yyjson_api_inline (line 4959) | yyjson_api_inline double yyjson_get_real(yyjson_val *val) {
  function yyjson_api_inline (line 4963) | yyjson_api_inline double yyjson_get_num(yyjson_val *val) {
  function yyjson_api_inline (line 4967) | yyjson_api_inline const char *yyjson_get_str(yyjson_val *val) {
  function yyjson_api_inline (line 4971) | yyjson_api_inline size_t yyjson_get_len(yyjson_val *val) {
  function yyjson_api_inline (line 4975) | yyjson_api_inline bool yyjson_equals_str(yyjson_val *val, const char *st...
  function yyjson_api_inline (line 4983) | yyjson_api_inline bool yyjson_equals_strn(yyjson_val *val, const char *str,
  function yyjson_api_inline (line 4994) | yyjson_api_inline bool yyjson_equals(yyjson_val *lhs, yyjson_val *rhs) {
  function yyjson_api_inline (line 4999) | yyjson_api_inline bool yyjson_set_raw(yyjson_val *val,
  function yyjson_api_inline (line 5006) | yyjson_api_inline bool yyjson_set_null(yyjson_val *val) {
  function yyjson_api_inline (line 5012) | yyjson_api_inline bool yyjson_set_bool(yyjson_val *val, bool num) {
  function yyjson_api_inline (line 5018) | yyjson_api_inline bool yyjson_set_uint(yyjson_val *val, uint64_t num) {
  function yyjson_api_inline (line 5024) | yyjson_api_inline bool yyjson_set_sint(yyjson_val *val, int64_t num) {
  function yyjson_api_inline (line 5030) | yyjson_api_inline bool yyjson_set_int(yyjson_val *val, int num) {
  function yyjson_api_inline (line 5036) | yyjson_api_inline bool yyjson_set_real(yyjson_val *val, double num) {
  function yyjson_api_inline (line 5042) | yyjson_api_inline bool yyjson_set_str(yyjson_val *val, const char *str) {
  function yyjson_api_inline (line 5049) | yyjson_api_inline bool yyjson_set_strn(yyjson_val *val,
  function yyjson_api_inline (line 5063) | yyjson_api_inline size_t yyjson_arr_size(yyjson_val *arr) {
  function yyjson_api_inline (line 5067) | yyjson_api_inline yyjson_val *yyjson_arr_get(yyjson_val *arr, size_t idx) {
  function yyjson_api_inline (line 5082) | yyjson_api_inline yyjson_val *yyjson_arr_get_first(yyjson_val *arr) {
  function yyjson_api_inline (line 5091) | yyjson_api_inline yyjson_val *yyjson_arr_get_last(yyjson_val *arr) {
  function yyjson_api_inline (line 5113) | yyjson_api_inline bool yyjson_arr_iter_init(yyjson_val *arr,
  function yyjson_api_inline (line 5125) | yyjson_api_inline yyjson_arr_iter yyjson_arr_iter_with(yyjson_val *arr) {
  function yyjson_api_inline (line 5131) | yyjson_api_inline bool yyjson_arr_iter_has_next(yyjson_arr_iter *iter) {
  function yyjson_api_inline (line 5135) | yyjson_api_inline yyjson_val *yyjson_arr_iter_next(yyjson_arr_iter *iter) {
  function yyjson_api_inline (line 5152) | yyjson_api_inline size_t yyjson_obj_size(yyjson_val *obj) {
  function yyjson_api_inline (line 5156) | yyjson_api_inline yyjson_val *yyjson_obj_get(yyjson_val *obj,
  function yyjson_api_inline (line 5161) | yyjson_api_inline yyjson_val *yyjson_obj_getn(yyjson_val *obj,
  function yyjson_api_inline (line 5181) | yyjson_api_inline bool yyjson_obj_iter_init(yyjson_val *obj,
  function yyjson_api_inline (line 5194) | yyjson_api_inline yyjson_obj_iter yyjson_obj_iter_with(yyjson_val *obj) {
  function yyjson_api_inline (line 5200) | yyjson_api_inline bool yyjson_obj_iter_has_next(yyjson_obj_iter *iter) {
  function yyjson_api_inline (line 5204) | yyjson_api_inline yyjson_val *yyjson_obj_iter_next(yyjson_obj_iter *iter) {
  function yyjson_api_inline (line 5214) | yyjson_api_inline yyjson_val *yyjson_obj_iter_get_val(yyjson_val *key) {
  function yyjson_api_inline (line 5218) | yyjson_api_inline yyjson_val *yyjson_obj_iter_get(yyjson_obj_iter *iter,
  function yyjson_api_inline (line 5223) | yyjson_api_inline yyjson_val *yyjson_obj_iter_getn(yyjson_obj_iter *iter,
  type yyjson_mut_val (line 5263) | struct yyjson_mut_val {
  type yyjson_str_chunk (line 5272) | typedef struct yyjson_str_chunk {
  type yyjson_str_pool (line 5281) | typedef struct yyjson_str_pool {
  type yyjson_val_chunk (line 5293) | typedef struct yyjson_val_chunk {
  type yyjson_val_pool (line 5303) | typedef struct yyjson_val_pool {
  type yyjson_mut_doc (line 5311) | struct yyjson_mut_doc {
  function yyjson_api_inline (line 5329) | yyjson_api_inline char *unsafe_yyjson_mut_str_alc(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 5344) | yyjson_api_inline char *unsafe_yyjson_mut_strncpy(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 5353) | yyjson_api_inline yyjson_mut_val *unsafe_yyjson_mut_val(yyjson_mut_doc *...
  function yyjson_api_inline (line 5374) | yyjson_api_inline yyjson_mut_val *yyjson_mut_doc_get_root(yyjson_mut_doc...
  function yyjson_api_inline (line 5378) | yyjson_api_inline void yyjson_mut_doc_set_root(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 5389) | yyjson_api_inline bool yyjson_mut_is_raw(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5393) | yyjson_api_inline bool yyjson_mut_is_null(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5397) | yyjson_api_inline bool yyjson_mut_is_true(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5401) | yyjson_api_inline bool yyjson_mut_is_false(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5405) | yyjson_api_inline bool yyjson_mut_is_bool(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5409) | yyjson_api_inline bool yyjson_mut_is_uint(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5413) | yyjson_api_inline bool yyjson_mut_is_sint(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5417) | yyjson_api_inline bool yyjson_mut_is_int(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5421) | yyjson_api_inline bool yyjson_mut_is_real(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5425) | yyjson_api_inline bool yyjson_mut_is_num(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5429) | yyjson_api_inline bool yyjson_mut_is_str(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5433) | yyjson_api_inline bool yyjson_mut_is_arr(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5437) | yyjson_api_inline bool yyjson_mut_is_obj(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5441) | yyjson_api_inline bool yyjson_mut_is_ctn(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5451) | yyjson_api_inline yyjson_type yyjson_mut_get_type(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5455) | yyjson_api_inline yyjson_subtype yyjson_mut_get_subtype(yyjson_mut_val *...
  function yyjson_api_inline (line 5459) | yyjson_api_inline uint8_t yyjson_mut_get_tag(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5463) | yyjson_api_inline const char *yyjson_mut_get_type_desc(yyjson_mut_val *v...
  function yyjson_api_inline (line 5467) | yyjson_api_inline const char *yyjson_mut_get_raw(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5471) | yyjson_api_inline bool yyjson_mut_get_bool(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5475) | yyjson_api_inline uint64_t yyjson_mut_get_uint(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5479) | yyjson_api_inline int64_t yyjson_mut_get_sint(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5483) | yyjson_api_inline int yyjson_mut_get_int(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5487) | yyjson_api_inline double yyjson_mut_get_real(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5491) | yyjson_api_inline double yyjson_mut_get_num(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5495) | yyjson_api_inline const char *yyjson_mut_get_str(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5499) | yyjson_api_inline size_t yyjson_mut_get_len(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5503) | yyjson_api_inline bool yyjson_mut_equals_str(yyjson_mut_val *val,
  function yyjson_api_inline (line 5508) | yyjson_api_inline bool yyjson_mut_equals_strn(yyjson_mut_val *val,
  function yyjson_api_inline (line 5516) | yyjson_api_inline bool yyjson_mut_equals(yyjson_mut_val *lhs,
  function yyjson_api_inline (line 5522) | yyjson_api_inline bool yyjson_mut_set_raw(yyjson_mut_val *val,
  function yyjson_api_inline (line 5529) | yyjson_api_inline bool yyjson_mut_set_null(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5535) | yyjson_api_inline bool yyjson_mut_set_bool(yyjson_mut_val *val, bool num) {
  function yyjson_api_inline (line 5541) | yyjson_api_inline bool yyjson_mut_set_uint(yyjson_mut_val *val, uint64_t...
  function yyjson_api_inline (line 5547) | yyjson_api_inline bool yyjson_mut_set_sint(yyjson_mut_val *val, int64_t ...
  function yyjson_api_inline (line 5553) | yyjson_api_inline bool yyjson_mut_set_int(yyjson_mut_val *val, int num) {
  function yyjson_api_inline (line 5559) | yyjson_api_inline bool yyjson_mut_set_real(yyjson_mut_val *val, double n...
  function yyjson_api_inline (line 5565) | yyjson_api_inline bool yyjson_mut_set_str(yyjson_mut_val *val,
  function yyjson_api_inline (line 5572) | yyjson_api_inline bool yyjson_mut_set_strn(yyjson_mut_val *val,
  function yyjson_api_inline (line 5579) | yyjson_api_inline bool yyjson_mut_set_arr(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5585) | yyjson_api_inline bool yyjson_mut_set_obj(yyjson_mut_val *val) {
  function yyjson_api_inline (line 5597) | yyjson_api_inline yyjson_mut_val *yyjson_mut_raw(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 5603) | yyjson_api_inline yyjson_mut_val *yyjson_mut_rawn(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 5617) | yyjson_api_inline yyjson_mut_val *yyjson_mut_rawcpy(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 5623) | yyjson_api_inline yyjson_mut_val *yyjson_mut_rawncpy(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 5638) | yyjson_api_inline yyjson_mut_val *yyjson_mut_null(yyjson_mut_doc *doc) {
  function yyjson_api_inline (line 5649) | yyjson_api_inline yyjson_mut_val *yyjson_mut_true(yyjson_mut_doc *doc) {
  function yyjson_api_inline (line 5660) | yyjson_api_inline yyjson_mut_val *yyjson_mut_false(yyjson_mut_doc *doc) {
  function yyjson_api_inline (line 5671) | yyjson_api_inline yyjson_mut_val *yyjson_mut_bool(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 5684) | yyjson_api_inline yyjson_mut_val *yyjson_mut_uint(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 5697) | yyjson_api_inline yyjson_mut_val *yyjson_mut_sint(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 5710) | yyjson_api_inline yyjson_mut_val *yyjson_mut_int(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 5715) | yyjson_api_inline yyjson_mut_val *yyjson_mut_real(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 5728) | yyjson_api_inline yyjson_mut_val *yyjson_mut_str(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 5745) | yyjson_api_inline yyjson_mut_val *yyjson_mut_strn(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 5759) | yyjson_api_inline yyjson_mut_val *yyjson_mut_strcpy(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 5777) | yyjson_api_inline yyjson_mut_val *yyjson_mut_strncpy(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 5798) | yyjson_api_inline size_t yyjson_mut_arr_size(yyjson_mut_val *arr) {
  function yyjson_api_inline (line 5802) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_get(yyjson_mut_val *arr,
  function yyjson_api_inline (line 5812) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_get_first(
  function yyjson_api_inline (line 5820) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_get_last(
  function yyjson_api_inline (line 5834) | yyjson_api_inline bool yyjson_mut_arr_iter_init(yyjson_mut_val *arr,
  function yyjson_api_inline (line 5848) | yyjson_api_inline yyjson_mut_arr_iter yyjson_mut_arr_iter_with(
  function yyjson_api_inline (line 5855) | yyjson_api_inline bool yyjson_mut_arr_iter_has_next(yyjson_mut_arr_iter ...
  function yyjson_api_inline (line 5859) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_iter_next(
  function yyjson_api_inline (line 5871) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_iter_remove(
  function yyjson_api_inline (line 5894) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr(yyjson_mut_doc *doc) {
  function yyjson_api_inline (line 5926) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_bool(
  function yyjson_api_inline (line 5934) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint(
  function yyjson_api_inline (line 5939) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint(
  function yyjson_api_inline (line 5944) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_real(
  function yyjson_api_inline (line 5949) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint8(
  function yyjson_api_inline (line 5957) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint16(
  function yyjson_api_inline (line 5965) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint32(
  function yyjson_api_inline (line 5973) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint64(
  function yyjson_api_inline (line 5981) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint8(
  function yyjson_api_inline (line 5989) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint16(
  function yyjson_api_inline (line 5997) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint32(
  function yyjson_api_inline (line 6005) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint64(
  function yyjson_api_inline (line 6013) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_float(
  function yyjson_api_inline (line 6021) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_double(
  function yyjson_api_inline (line 6029) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_str(
  function yyjson_api_inline (line 6039) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_strn(
  function yyjson_api_inline (line 6049) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_strcpy(
  function yyjson_api_inline (line 6063) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_strncpy(
  function yyjson_api_inline (line 6085) | yyjson_api_inline bool yyjson_mut_arr_insert(yyjson_mut_val *arr,
  function yyjson_api_inline (line 6116) | yyjson_api_inline bool yyjson_mut_arr_append(yyjson_mut_val *arr,
  function yyjson_api_inline (line 6135) | yyjson_api_inline bool yyjson_mut_arr_prepend(yyjson_mut_val *arr,
  function yyjson_api_inline (line 6154) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_replace(yyjson_mut_val ...
  function yyjson_api_inline (line 6182) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_remove(yyjson_mut_val *...
  function yyjson_api_inline (line 6206) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_remove_first(
  function yyjson_api_inline (line 6225) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_remove_last(
  function yyjson_api_inline (line 6247) | yyjson_api_inline bool yyjson_mut_arr_remove_range(yyjson_mut_val *arr,
  function yyjson_api_inline (line 6269) | yyjson_api_inline bool yyjson_mut_arr_clear(yyjson_mut_val *arr) {
  function yyjson_api_inline (line 6277) | yyjson_api_inline bool yyjson_mut_arr_rotate(yyjson_mut_val *arr,
  function yyjson_api_inline (line 6295) | yyjson_api_inline bool yyjson_mut_arr_add_val(yyjson_mut_val *arr,
  function yyjson_api_inline (line 6300) | yyjson_api_inline bool yyjson_mut_arr_add_null(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6309) | yyjson_api_inline bool yyjson_mut_arr_add_true(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6318) | yyjson_api_inline bool yyjson_mut_arr_add_false(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6327) | yyjson_api_inline bool yyjson_mut_arr_add_bool(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6337) | yyjson_api_inline bool yyjson_mut_arr_add_uint(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6347) | yyjson_api_inline bool yyjson_mut_arr_add_sint(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6357) | yyjson_api_inline bool yyjson_mut_arr_add_int(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6367) | yyjson_api_inline bool yyjson_mut_arr_add_real(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6377) | yyjson_api_inline bool yyjson_mut_arr_add_str(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6387) | yyjson_api_inline bool yyjson_mut_arr_add_strn(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6397) | yyjson_api_inline bool yyjson_mut_arr_add_strcpy(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6407) | yyjson_api_inline bool yyjson_mut_arr_add_strncpy(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6417) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_add_arr(yyjson_mut_doc ...
  function yyjson_api_inline (line 6426) | yyjson_api_inline yyjson_mut_val *yyjson_mut_arr_add_obj(yyjson_mut_doc ...
  function yyjson_api_inline (line 6441) | yyjson_api_inline size_t yyjson_mut_obj_size(yyjson_mut_val *obj) {
  function yyjson_api_inline (line 6445) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj_get(yyjson_mut_val *obj,
  function yyjson_api_inline (line 6450) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj_getn(yyjson_mut_val *obj,
  function yyjson_api_inline (line 6470) | yyjson_api_inline bool yyjson_mut_obj_iter_init(yyjson_mut_val *obj,
  function yyjson_api_inline (line 6484) | yyjson_api_inline yyjson_mut_obj_iter yyjson_mut_obj_iter_with(
  function yyjson_api_inline (line 6491) | yyjson_api_inline bool yyjson_mut_obj_iter_has_next(yyjson_mut_obj_iter ...
  function yyjson_api_inline (line 6495) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_next(
  function yyjson_api_inline (line 6507) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_get_val(
  function yyjson_api_inline (line 6512) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_remove(
  function yyjson_api_inline (line 6529) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_get(
  function yyjson_api_inline (line 6534) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_getn(
  function yyjson_api_inline (line 6561) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj(yyjson_mut_doc *doc) {
  function yyjson_api_inline (line 6572) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj_with_str(yyjson_mut_doc...
  function yyjson_api_inline (line 6603) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj_with_kv(yyjson_mut_doc ...
  function yyjson_api_inline (line 6641) | yyjson_api_inline void unsafe_yyjson_mut_obj_add(yyjson_mut_val *obj,
  function yyjson_api_inline (line 6658) | yyjson_api_inline yyjson_mut_val *unsafe_yyjson_mut_obj_remove(
  function yyjson_api_inline (line 6686) | yyjson_api_inline bool unsafe_yyjson_mut_obj_replace(yyjson_mut_val *obj,
  function yyjson_api_inline (line 6708) | yyjson_api_inline void unsafe_yyjson_mut_obj_rotate(yyjson_mut_val *obj,
  function yyjson_api_inline (line 6715) | yyjson_api_inline bool yyjson_mut_obj_add(yyjson_mut_val *obj,
  function yyjson_api_inline (line 6726) | yyjson_api_inline bool yyjson_mut_obj_put(yyjson_mut_val *obj,
  function yyjson_api_inline (line 6752) | yyjson_api_inline bool yyjson_mut_obj_insert(yyjson_mut_val *obj,
  function yyjson_api_inline (line 6774) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove(yyjson_mut_val *...
  function yyjson_api_inline (line 6783) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_key(
  function yyjson_api_inline (line 6792) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_keyn(
  function yyjson_api_inline (line 6800) | yyjson_api_inline bool yyjson_mut_obj_clear(yyjson_mut_val *obj) {
  function yyjson_api_inline (line 6808) | yyjson_api_inline bool yyjson_mut_obj_replace(yyjson_mut_val *obj,
  function yyjson_api_inline (line 6818) | yyjson_api_inline bool yyjson_mut_obj_rotate(yyjson_mut_val *obj,
  function yyjson_api_inline (line 6853) | yyjson_api_inline bool yyjson_mut_obj_add_null(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6861) | yyjson_api_inline bool yyjson_mut_obj_add_true(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6869) | yyjson_api_inline bool yyjson_mut_obj_add_false(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6877) | yyjson_api_inline bool yyjson_mut_obj_add_bool(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6887) | yyjson_api_inline bool yyjson_mut_obj_add_uint(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6897) | yyjson_api_inline bool yyjson_mut_obj_add_sint(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6907) | yyjson_api_inline bool yyjson_mut_obj_add_int(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6917) | yyjson_api_inline bool yyjson_mut_obj_add_real(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6927) | yyjson_api_inline bool yyjson_mut_obj_add_str(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6941) | yyjson_api_inline bool yyjson_mut_obj_add_strn(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6953) | yyjson_api_inline bool yyjson_mut_obj_add_strcpy(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6966) | yyjson_api_inline bool yyjson_mut_obj_add_strncpy(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 6979) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj_add_arr(yyjson_mut_doc ...
  function yyjson_api_inline (line 6987) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj_add_obj(yyjson_mut_doc ...
  function yyjson_api_inline (line 6995) | yyjson_api_inline bool yyjson_mut_obj_add_val(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 7005) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_str(yyjson_mut_v...
  function yyjson_api_inline (line 7010) | yyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_strn(
  function yyjson_api_inline (line 7028) | yyjson_api_inline bool yyjson_mut_obj_rename_key(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 7037) | yyjson_api_inline bool yyjson_mut_obj_rename_keyn(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 7107) | yyjson_api_inline yyjson_val *yyjson_doc_ptr_get(yyjson_doc *doc,
  function yyjson_api_inline (line 7113) | yyjson_api_inline yyjson_val *yyjson_doc_ptr_getn(yyjson_doc *doc,
  function yyjson_api_inline (line 7118) | yyjson_api_inline yyjson_val *yyjson_doc_ptr_getx(yyjson_doc *doc,
  function yyjson_api_inline (line 7140) | yyjson_api_inline yyjson_val *yyjson_ptr_get(yyjson_val *val,
  function yyjson_api_inline (line 7146) | yyjson_api_inline yyjson_val *yyjson_ptr_getn(yyjson_val *val,
  function yyjson_api_inline (line 7151) | yyjson_api_inline yyjson_val *yyjson_ptr_getx(yyjson_val *val,
  function yyjson_api_inline (line 7169) | yyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_get(yyjson_mut_doc ...
  function yyjson_api_inline (line 7175) | yyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_getn(yyjson_mut_doc...
  function yyjson_api_inline (line 7181) | yyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_getx(yyjson_mut_doc...
  function yyjson_api_inline (line 7207) | yyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_get(yyjson_mut_val *val,
  function yyjson_api_inline (line 7213) | yyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_getn(yyjson_mut_val *val,
  function yyjson_api_inline (line 7219) | yyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_getx(yyjson_mut_val *val,
  function yyjson_api_inline (line 7241) | yyjson_api_inline bool yyjson_mut_doc_ptr_add(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 7248) | yyjson_api_inline bool yyjson_mut_doc_ptr_addn(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 7255) | yyjson_api_inline bool yyjson_mut_doc_ptr_addx(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 7302) | yyjson_api_inline bool yyjson_mut_ptr_add(yyjson_mut_val *val,
  function yyjson_api_inline (line 7310) | yyjson_api_inline bool yyjson_mut_ptr_addn(yyjson_mut_val *val,
  function yyjson_api_inline (line 7317) | yyjson_api_inline bool yyjson_mut_ptr_addx(yyjson_mut_val *val,
  function yyjson_api_inline (line 7343) | yyjson_api_inline bool yyjson_mut_doc_ptr_set(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 7350) | yyjson_api_inline bool yyjson_mut_doc_ptr_setn(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 7356) | yyjson_api_inline bool yyjson_mut_doc_ptr_setx(yyjson_mut_doc *doc,
  function yyjson_api_inline (line 7406) | yyjson_api_inline bool yyjson_mut_ptr_set(yyjson_mut_val *val,
  function yyjson_api_inline (line 7414) | yyjson_api_inline bool yyjson_mut_ptr_setn(yyjson_mut_val *val,
  function yyjson_api_inline (line 7421) | yyjson_api_inline bool yyjson_mut_ptr_setx(yyjson_mut_val *val,
  function yyjson_api_inline (line 7450) | yyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_replace(
  function yyjson_api_inline (line 7456) | yyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_replacen(
  function yyjson_api_inline (line 7461) | yyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_replacex(
  function yyjson_api_inline (line 7494) | yyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_replace(
  function yyjson_api_inline (line 7500) | yyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_replacen(
  function yyjson_api_inline (line 7505) | yyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_replacex(
  function yyjson_api_inline (line 7527) | yyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_remove(
  function yyjson_api_inline (line 7533) | yyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_removen(
  function yyjson_api_inline (line 7538) | yyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_removex(
  function yyjson_api_inline (line 7566) | yyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_remove(yyjson_mut_val *...
  function yyjson_api_inline (line 7572) | yyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_removen(yyjson_mut_val ...
  function yyjson_api_inline (line 7578) | yyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_removex(yyjson_mut_val ...
  function yyjson_api_inline (line 7601) | yyjson_api_inline bool yyjson_ptr_ctx_append(yyjson_ptr_ctx *ctx,
  function yyjson_api_inline (line 7655) | yyjson_api_inline bool yyjson_ptr_ctx_replace(yyjson_ptr_ctx *ctx,
  function yyjson_api_inline (line 7687) | yyjson_api_inline bool yyjson_ptr_ctx_remove(yyjson_ptr_ctx *ctx) {
  function yyjson_api_inline (line 7729) | yyjson_api_inline bool yyjson_ptr_get_bool(
  function yyjson_api_inline (line 7744) | yyjson_api_inline bool yyjson_ptr_get_uint(
  function yyjson_api_inline (line 7762) | yyjson_api_inline bool yyjson_ptr_get_sint(
  function yyjson_api_inline (line 7780) | yyjson_api_inline bool yyjson_ptr_get_real(
  function yyjson_api_inline (line 7796) | yyjson_api_inline bool yyjson_ptr_get_num(
  function yyjson_api_inline (line 7811) | yyjson_api_inline bool yyjson_ptr_get_str(
  function yyjson_val (line 7830) | yyjson_val *yyjson_doc_get_pointer(yyjson_doc *doc,
  function yyjson_val (line 7837) | yyjson_val *yyjson_doc_get_pointern(yyjson_doc *doc,
  function yyjson_mut_val (line 7845) | yyjson_mut_val *yyjson_mut_doc_get_pointer(
  function yyjson_mut_val (line 7852) | yyjson_mut_val *yyjson_mut_doc_get_pointern(
  function yyjson_val (line 7859) | yyjson_val *yyjson_get_pointer(yyjson_val *val,
  function yyjson_val (line 7866) | yyjson_val *yyjson_get_pointern(yyjson_val *val,
  function yyjson_mut_val (line 7874) | yyjson_mut_val *yyjson_mut_get_pointer(yyjson_mut_val *val,
  function yyjson_mut_val (line 7881) | yyjson_mut_val *yyjson_mut_get_pointern(yyjson_mut_val *val,
  function yyjson_val (line 7889) | yyjson_val *unsafe_yyjson_get_pointer(yyjson_val *val,
  function yyjson_mut_val (line 7898) | yyjson_mut_val *unsafe_yyjson_mut_get_pointer(

FILE: integration/wsgi.py
  function root (line 17) | def root():

FILE: pysrc/orjson/__init__.pyi
  function dumps (line 10) | def dumps(
  function loads (line 15) | def loads(__obj: bytes | bytearray | memoryview | str) -> Any: ...
  class JSONDecodeError (line 17) | class JSONDecodeError(json.JSONDecodeError): ...
  class JSONEncodeError (line 18) | class JSONEncodeError(TypeError): ...
  class Fragment (line 20) | class Fragment(tuple):

FILE: src/alloc.rs
  type PyMemAllocator (line 8) | struct PyMemAllocator {}
  method alloc (line 17) | unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
  method dealloc (line 22) | unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) {
  method alloc_zeroed (line 27) | unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 {
  method realloc (line 37) | unsafe fn realloc(&self, ptr: *mut u8, _layout: Layout, new_size: usize)...

FILE: src/deserialize/backend/ffi.rs
  type yyjson_alc (line 5) | pub(crate) struct yyjson_alc {
  type yyjson_read_code (line 25) | pub(crate) type yyjson_read_code = u32;
  constant YYJSON_READ_SUCCESS (line 26) | pub(crate) const YYJSON_READ_SUCCESS: yyjson_read_code = 0;
  type yyjson_read_err (line 29) | pub(crate) struct yyjson_read_err {
  type yyjson_val (line 46) | pub(crate) struct yyjson_val {
  type yyjson_doc (line 52) | pub(crate) struct yyjson_doc {
  function yyjson_read_opts (line 61) | pub fn yyjson_read_opts(
  function yyjson_alc_pool_init (line 68) | pub fn yyjson_alc_pool_init(

FILE: src/deserialize/backend/yyjson.rs
  constant YYJSON_TAG_BIT (line 15) | const YYJSON_TAG_BIT: u8 = 8;
  constant YYJSON_VAL_SIZE (line 17) | const YYJSON_VAL_SIZE: usize = core::mem::size_of::<yyjson_val>();
  constant TAG_ARRAY (line 19) | const TAG_ARRAY: u8 = 0b00000110;
  constant TAG_DOUBLE (line 20) | const TAG_DOUBLE: u8 = 0b00010100;
  constant TAG_FALSE (line 21) | const TAG_FALSE: u8 = 0b00000011;
  constant TAG_INT64 (line 22) | const TAG_INT64: u8 = 0b00001100;
  constant TAG_NULL (line 23) | const TAG_NULL: u8 = 0b00000010;
  constant TAG_OBJECT (line 24) | const TAG_OBJECT: u8 = 0b00000111;
  constant TAG_STRING (line 25) | const TAG_STRING: u8 = 0b00000101;
  constant TAG_TRUE (line 26) | const TAG_TRUE: u8 = 0b00001011;
  constant TAG_UINT64 (line 27) | const TAG_UINT64: u8 = 0b00000100;
  function yyjson_doc_get_root (line 35) | fn yyjson_doc_get_root(doc: *mut yyjson_doc) -> *mut yyjson_val {
  function unsafe_yyjson_get_len (line 39) | fn unsafe_yyjson_get_len(val: *mut yyjson_val) -> usize {
  function unsafe_yyjson_get_first (line 43) | fn unsafe_yyjson_get_first(ctn: *mut yyjson_val) -> *mut yyjson_val {
  constant MINIMUM_BUFFER_CAPACITY (line 47) | const MINIMUM_BUFFER_CAPACITY: usize = 4096;
  function buffer_capacity_to_allocate (line 49) | fn buffer_capacity_to_allocate(len: usize) -> usize {
  function unsafe_yyjson_is_ctn (line 54) | fn unsafe_yyjson_is_ctn(val: *mut yyjson_val) -> bool {
  function unsafe_yyjson_get_next_container (line 59) | fn unsafe_yyjson_get_next_container(val: *mut yyjson_val) -> *mut yyjson...
  function unsafe_yyjson_get_next_non_container (line 64) | fn unsafe_yyjson_get_next_non_container(val: *mut yyjson_val) -> *mut yy...
  function deserialize (line 68) | pub(crate) fn deserialize(
  type ElementType (line 144) | enum ElementType {
    method from_tag (line 157) | fn from_tag(elem: *mut yyjson_val) -> Self {
  function parse_yy_string (line 174) | fn parse_yy_string(elem: *mut yyjson_val) -> NonNull<crate::ffi::PyObjec...
  function parse_yy_u64 (line 183) | fn parse_yy_u64(elem: *mut yyjson_val) -> NonNull<crate::ffi::PyObject> {
  function parse_yy_i64 (line 188) | fn parse_yy_i64(elem: *mut yyjson_val) -> NonNull<crate::ffi::PyObject> {
  function parse_yy_f64 (line 193) | fn parse_yy_f64(elem: *mut yyjson_val) -> NonNull<crate::ffi::PyObject> {
  function populate_yy_array (line 198) | fn populate_yy_array(mut list: PyListRef, elem: *mut yyjson_val) {
  function populate_yy_object (line 241) | fn populate_yy_object(mut dict: PyDictRef, elem: *mut yyjson_val) {

FILE: src/deserialize/cache.rs
  type CachedKey (line 9) | pub(crate) struct CachedKey {
    method new (line 17) | pub const fn new(ptr: PyStrRef) -> CachedKey {
    method get (line 20) | pub fn get(&mut self) -> PyStrRef {
  method drop (line 28) | fn drop(&mut self) {
  type KeyMap (line 33) | pub(crate) type KeyMap =

FILE: src/deserialize/deserializer.rs
  type Deserializer (line 10) | pub struct Deserializer {
    method from_pyobject (line 16) | pub fn from_pyobject(
    method deserialize (line 25) | pub fn deserialize(&self) -> Result<NonNull<crate::ffi::PyObject>, Des...
  function deserialize (line 45) | pub(crate) fn deserialize(

FILE: src/deserialize/error.rs
  type DeserializeError (line 6) | pub(crate) struct DeserializeError<'a> {
  function invalid (line 14) | pub fn invalid(message: Cow<'a, str>) -> Self {
  function from_yyjson (line 23) | pub fn from_yyjson(message: Cow<'a, str>, pos: i64, data: &'a str) -> Se...
  function pos (line 34) | pub fn pos(&self) -> i64 {

FILE: src/deserialize/input.rs
  constant INPUT_TYPE_MESSAGE (line 12) | const INPUT_TYPE_MESSAGE: &str = "Input must be bytes, bytearray, memory...
  constant INPUT_TYPE_MESSAGE (line 15) | const INPUT_TYPE_MESSAGE: &str = "Input must be bytes or str";
  constant INPUT_TYPE_MESSAGE (line 18) | const INPUT_TYPE_MESSAGE: &str = "Input must be bytes, bytearray, or str";
  type Utf8Buffer (line 21) | pub struct Utf8Buffer {
    method buffer_from_ptr (line 27) | fn buffer_from_ptr(
    method buffer_from_ptr (line 44) | fn buffer_from_ptr(
    method from_pyobject (line 56) | pub fn from_pyobject(
    method as_str (line 79) | pub fn as_str(&self) -> &'static str {
    method as_bytes (line 83) | pub fn as_bytes(&self) -> &'static [u8] {
    method len (line 87) | pub fn len(&self) -> usize {

FILE: src/deserialize/pyobject.rs
  function get_unicode_key (line 8) | pub(crate) fn get_unicode_key(key_str: &str) -> PyStrRef {
  function get_unicode_key (line 35) | pub(crate) fn get_unicode_key(key_str: &str) -> PyStrRef {
  function get_unicode_key (line 41) | pub(crate) fn get_unicode_key(key_str: &str) -> PyStrRef {

FILE: src/exception.rs
  function raise_loads_exception (line 13) | pub(crate) fn raise_loads_exception(err: DeserializeError) -> *mut PyObj...
  function raise_dumps_exception_fixed (line 34) | pub(crate) fn raise_dumps_exception_fixed(msg: &str) -> *mut PyObject {
  function raise_dumps_exception_dynamic (line 47) | pub(crate) fn raise_dumps_exception_dynamic(err: &str) -> *mut PyObject {
  function raise_dumps_exception_dynamic (line 68) | pub(crate) fn raise_dumps_exception_dynamic(err: &str) -> *mut PyObject {

FILE: src/ffi/atomiculong.rs
  type GetAtomicCULong (line 5) | pub struct GetAtomicCULong<const WIDTH: usize>();
  type AtomicCULongType (line 7) | pub trait AtomicCULongType {
    type Type (line 11) | type Type = core::sync::atomic::AtomicU32;
    type Type (line 14) | type Type = core::sync::atomic::AtomicU64;
  type TYPE (line 17) | pub type TYPE =
  type AtomicCULong (line 21) | pub type AtomicCULong = atomic_c_ulong::TYPE;

FILE: src/ffi/buffer.rs
  type _PyManagedBufferObject (line 8) | pub(crate) struct _PyManagedBufferObject {
  type PyMemoryViewObject (line 16) | pub(crate) struct PyMemoryViewObject {
  function PyMemoryView_GET_BUFFER (line 29) | pub(crate) unsafe fn PyMemoryView_GET_BUFFER(op: *mut PyObject) -> *cons...

FILE: src/ffi/bytes.rs
  function PyBytes_AS_STRING (line 12) | pub(crate) unsafe fn PyBytes_AS_STRING(op: *mut PyObject) -> *const c_ch...
  function PyBytes_AS_STRING (line 19) | pub(crate) unsafe fn PyBytes_AS_STRING(op: *mut PyObject) -> *const c_ch...
  function PyBytes_GET_SIZE (line 25) | pub(crate) unsafe fn PyBytes_GET_SIZE(op: *mut PyObject) -> Py_ssize_t {

FILE: src/ffi/compat.rs
  constant _Py_IMMORTAL_REFCNT_LOCAL (line 6) | pub(crate) const _Py_IMMORTAL_REFCNT_LOCAL: u32 = u32::MAX;
  constant _Py_IMMORTAL_MINIMUM_REFCNT (line 10) | pub(crate) const _Py_IMMORTAL_MINIMUM_REFCNT: pyo3_ffi::Py_ssize_t =
  constant _Py_IMMORTAL_REFCNT (line 15) | pub(crate) const _Py_IMMORTAL_REFCNT: pyo3_ffi::Py_ssize_t = {
  function _Py_IsImmortal (line 26) | pub(crate) unsafe fn _Py_IsImmortal(op: *mut pyo3_ffi::PyObject) -> core...
  function PyDict_New (line 59) | pub(crate) unsafe fn PyDict_New(len: isize) -> *mut pyo3_ffi::PyObject {
  function PyDict_New (line 72) | pub(crate) unsafe fn PyDict_New(_len: isize) -> *mut pyo3_ffi::PyObject {
  function Py_HashBuffer (line 79) | pub(crate) unsafe fn Py_HashBuffer(
  function Py_HashBuffer (line 89) | pub(crate) unsafe fn Py_HashBuffer(
  function PyLong_AsByteArray (line 99) | pub(crate) unsafe fn PyLong_AsByteArray(
  function PyLong_AsByteArray (line 112) | pub(crate) unsafe fn PyLong_AsByteArray(
  function Py_SIZE (line 125) | pub(crate) unsafe fn Py_SIZE(op: *mut pyo3_ffi::PyObject) -> pyo3_ffi::P...
  function Py_SIZE (line 132) | pub(crate) unsafe fn Py_SIZE(op: *mut pyo3_ffi::PyObject) -> pyo3_ffi::P...
  function Py_SET_SIZE (line 140) | pub(crate) unsafe fn Py_SET_SIZE(op: *mut pyo3_ffi::PyVarObject, size: p...
  function Py_SET_SIZE (line 148) | pub(crate) unsafe fn Py_SET_SIZE(op: *mut pyo3_ffi::PyVarObject, size: p...
  function PyTuple_GET_ITEM (line 155) | pub(crate) unsafe fn PyTuple_GET_ITEM(
  function PyTuple_GET_ITEM (line 170) | pub(crate) unsafe fn PyTuple_GET_ITEM(
  function PyTuple_SET_ITEM (line 180) | pub(crate) unsafe fn PyTuple_SET_ITEM(
  function PyTuple_SET_ITEM (line 196) | pub(crate) unsafe fn PyTuple_SET_ITEM(
  function _PyBytes_Resize (line 209) | pub fn _PyBytes_Resize(
  function _PyDict_Next (line 215) | pub fn _PyDict_Next(
  function _PyDict_NewPresized (line 224) | pub fn _PyDict_NewPresized(minused: pyo3_ffi::Py_ssize_t) -> *mut pyo3_f...
  function _PyDict_Contains_KnownHash (line 227) | pub fn _PyDict_Contains_KnownHash(
  function _PyDict_SetItem_KnownHash (line 234) | pub(crate) fn _PyDict_SetItem_KnownHash(
  function _PyDict_SetItem_KnownHash_LockHeld (line 242) | pub(crate) fn _PyDict_SetItem_KnownHash_LockHeld(
  function _PyLong_AsByteArray (line 251) | pub(crate) fn _PyLong_AsByteArray(
  function _PyLong_AsByteArray (line 262) | pub(crate) fn _PyLong_AsByteArray(

FILE: src/ffi/fragment.rs
  type Fragment (line 25) | pub(crate) struct Fragment {
  function raise_args_exception (line 51) | fn raise_args_exception() {
  function orjson_fragment_tp_new (line 64) | pub(crate) unsafe extern "C" fn orjson_fragment_tp_new(
  function orjson_fragment_dealloc (line 107) | pub(crate) unsafe extern "C" fn orjson_fragment_dealloc(object: *mut PyO...
  function orjson_fragmenttype_new (line 117) | pub(crate) unsafe extern "C" fn orjson_fragmenttype_new() -> *mut PyType...

FILE: src/ffi/pyboolref.rs
  type PyBoolRef (line 6) | pub(crate) struct PyBoolRef {
    method from_ptr_unchecked (line 21) | pub(crate) unsafe fn from_ptr_unchecked(ptr: *mut pyo3_ffi::PyObject) ...
    method as_ptr (line 33) | pub const fn as_ptr(&self) -> *mut pyo3_ffi::PyObject {
    method as_non_null_ptr (line 39) | pub const fn as_non_null_ptr(&self) -> core::ptr::NonNull<pyo3_ffi::Py...
    method pytrue (line 44) | pub fn pytrue() -> Self {
    method pyfalse (line 51) | pub fn pyfalse() -> Self {
  method eq (line 14) | fn eq(&self, other: &Self) -> bool {

FILE: src/ffi/pybytearrayref.rs
  type PyByteArrayRefError (line 4) | pub(crate) enum PyByteArrayRefError {
  type PyByteArrayRef (line 10) | pub(crate) struct PyByteArrayRef {
    method from_ptr (line 25) | pub fn from_ptr(ptr: *mut pyo3_ffi::PyObject) -> Result<Self, PyByteAr...
    method as_ptr (line 39) | pub fn as_ptr(&self) -> *mut pyo3_ffi::PyObject {
    method as_non_null_ptr (line 45) | pub fn as_non_null_ptr(&self) -> core::ptr::NonNull<pyo3_ffi::PyObject> {
    method as_bytes (line 50) | pub fn as_bytes(&self) -> &'static [u8] {
    method as_str (line 62) | pub fn as_str(&self) -> Option<&'static str> {
  method eq (line 18) | fn eq(&self, other: &Self) -> bool {

FILE: src/ffi/pybytesref.rs
  type PyBytesRefError (line 4) | pub(crate) enum PyBytesRefError {
  type PyBytesRef (line 10) | pub(crate) struct PyBytesRef {
    method from_ptr (line 25) | pub fn from_ptr(ptr: *mut pyo3_ffi::PyObject) -> Result<Self, PyBytesR...
    method as_ptr (line 39) | pub fn as_ptr(&self) -> *mut pyo3_ffi::PyObject {
    method as_non_null_ptr (line 45) | pub fn as_non_null_ptr(&self) -> core::ptr::NonNull<pyo3_ffi::PyObject> {
    method as_bytes (line 50) | pub fn as_bytes(&self) -> &'static [u8] {
    method as_str (line 60) | pub fn as_str(&self) -> Option<&'static str> {
  method eq (line 18) | fn eq(&self, other: &Self) -> bool {

FILE: src/ffi/pydictref.rs
  type PyDictRef (line 9) | pub(crate) struct PyDictRef {
    method with_capacity (line 25) | pub fn with_capacity(cap: usize) -> Self {
    method with_capacity (line 36) | pub fn with_capacity(_cap: usize) -> Self {
    method new (line 42) | pub fn new() -> Self {
    method from_ptr_unchecked (line 51) | pub(crate) unsafe fn from_ptr_unchecked(ptr: *mut pyo3_ffi::PyObject) ...
    method as_ptr (line 66) | pub fn as_ptr(&self) -> *mut pyo3_ffi::PyObject {
    method as_non_null_ptr (line 72) | pub fn as_non_null_ptr(&self) -> core::ptr::NonNull<pyo3_ffi::PyObject> {
    method len (line 77) | pub fn len(&self) -> usize {
    method set (line 83) | pub fn set(&mut self, key: crate::ffi::PyStrRef, value: *mut crate::ff...
    method set (line 111) | pub fn set(&mut self, key: crate::ffi::PyStrRef, value: *mut crate::ff...
  method eq (line 17) | fn eq(&self, other: &Self) -> bool {

FILE: src/ffi/pyfloatref.rs
  type PyFloatRef (line 6) | pub(crate) struct PyFloatRef {
    method from_ptr_unchecked (line 21) | pub(crate) unsafe fn from_ptr_unchecked(ptr: *mut pyo3_ffi::PyObject) ...
    method as_non_null_ptr (line 32) | pub fn as_non_null_ptr(&self) -> core::ptr::NonNull<pyo3_ffi::PyObject> {
    method value (line 37) | pub fn value(&self) -> f64 {
    method from_f64 (line 42) | pub fn from_f64(value: f64) -> Self {
  method eq (line 14) | fn eq(&self, other: &Self) -> bool {

FILE: src/ffi/pyfragmentref.rs
  type PyFragmentRefError (line 6) | pub(crate) enum PyFragmentRefError {
  type PyFragmentRef (line 12) | pub(crate) struct PyFragmentRef {
    method from_ptr_unchecked (line 27) | pub(crate) unsafe fn from_ptr_unchecked(ptr: *mut pyo3_ffi::PyObject) ...
    method as_ptr (line 39) | pub fn as_ptr(&self) -> *mut pyo3_ffi::PyObject {
    method as_non_null_ptr (line 45) | pub fn as_non_null_ptr(&self) -> core::ptr::NonNull<pyo3_ffi::PyObject> {
    method value (line 50) | pub fn value(&self) -> Result<&[u8], PyFragmentRefError> {
  method eq (line 20) | fn eq(&self, other: &Self) -> bool {

FILE: src/ffi/pyintref.rs
  constant SIGN_MASK (line 14) | const SIGN_MASK: usize = 3;
  constant NON_SIZE_BITS (line 18) | const NON_SIZE_BITS: usize = 3;
  type _PyLongValue (line 22) | pub(crate) struct _PyLongValue {
  type PyLongObject (line 29) | pub(crate) struct PyLongObject {
  type PyLongObject (line 37) | pub(crate) struct PyLongObject {
  type PyIntError (line 42) | pub(crate) enum PyIntError {
  type PyIntOptConversionError (line 49) | pub(crate) enum PyIntOptConversionError {
  type PyIntKind (line 55) | pub(crate) enum PyIntKind {
  type PyIntRef (line 64) | pub(crate) struct PyIntRef {
    method from_ptr (line 79) | pub fn from_ptr(ptr: *mut pyo3_ffi::PyObject) -> Result<Self, PyIntErr...
    method from_ptr_unchecked (line 92) | pub unsafe fn from_ptr_unchecked(ptr: *mut PyObject) -> Self {
    method as_ptr (line 106) | pub fn as_ptr(&self) -> *mut PyObject {
    method as_non_null_ptr (line 111) | pub fn as_non_null_ptr(&self) -> core::ptr::NonNull<PyObject> {
    method kind (line 117) | pub fn kind(&self) -> PyIntKind {
    method is_signed (line 128) | pub fn is_signed(&self) -> bool {
    method is_signed (line 134) | pub fn is_signed(&self) -> bool {
    method fits_in_i32 (line 140) | pub fn fits_in_i32(&self) -> bool {
    method fits_in_i32 (line 146) | pub fn fits_in_i32(&self) -> bool {
    method get_inline_value (line 152) | fn get_inline_value(&self) -> u32 {
    method get_inline_value (line 158) | fn get_inline_value(&self) -> u32 {
    method as_u32 (line 164) | pub unsafe fn as_u32(&self) -> u32 {
    method as_i32 (line 171) | pub unsafe fn as_i32(&self) -> i32 {
    method get_64bit_value (line 178) | fn get_64bit_value(&self) -> Result<[u8; 8], PyIntError> {
    method as_i64 (line 201) | pub unsafe fn as_i64(&self) -> Result<i64, PyIntError> {
    method as_u64 (line 212) | pub unsafe fn as_u64(&self) -> Result<u64, PyIntError> {
    method as_i64 (line 223) | pub unsafe fn as_i64(&self) -> Result<i64, PyIntError> {
    method as_u64 (line 236) | pub unsafe fn as_u64(&self) -> Result<u64, PyIntError> {
    method as_opt (line 247) | pub fn as_opt(&self) -> Result<Opt, PyIntOptConversionError> {
    method as_opt (line 266) | pub fn as_opt(&self) -> Result<Opt, PyIntOptConversionError> {
    method from_i64 (line 280) | pub fn from_i64(value: i64) -> Self {
    method from_u64 (line 289) | pub fn from_u64(value: u64) -> Self {
  method eq (line 72) | fn eq(&self, other: &Self) -> bool {

FILE: src/ffi/pylistref.rs
  type PyListRef (line 6) | pub(crate) struct PyListRef {
    method from_ptr_unchecked (line 21) | pub unsafe fn from_ptr_unchecked(ptr: *mut pyo3_ffi::PyObject) -> Self {
    method with_capacity (line 35) | pub fn with_capacity(cap: usize) -> Self {
    method as_ptr (line 47) | pub fn as_ptr(&self) -> *mut pyo3_ffi::PyObject {
    method as_non_null_ptr (line 53) | pub fn as_non_null_ptr(&self) -> core::ptr::NonNull<pyo3_ffi::PyObject> {
    method data_ptr (line 59) | pub fn data_ptr(&self) -> *const *mut pyo3_ffi::PyObject {
    method get (line 65) | pub fn get(&mut self, i: usize) -> *mut pyo3_ffi::PyObject {
    method get (line 71) | pub fn get(&mut self, i: usize) -> *mut pyo3_ffi::PyObject {
    method set (line 77) | pub fn set(&mut self, i: usize, val: *mut pyo3_ffi::PyObject) {
    method set (line 84) | pub fn set(&mut self, i: usize, val: *mut pyo3_ffi::PyObject) {
    method len (line 89) | pub fn len(&self) -> usize {
  method eq (line 14) | fn eq(&self, other: &Self) -> bool {

FILE: src/ffi/pymemoryview.rs
  type PyMemoryViewRefError (line 6) | pub(crate) enum PyMemoryViewRefError {
  type PyMemoryViewRef (line 14) | pub(crate) struct PyMemoryViewRef {
    method from_ptr (line 30) | pub fn from_ptr(ptr: *mut pyo3_ffi::PyObject) -> Result<Self, PyMemory...
    method from_ptr (line 52) | pub fn from_ptr(ptr: *mut pyo3_ffi::PyObject) -> Result<Self, PyMemory...
    method as_ptr (line 65) | pub fn as_ptr(&self) -> *mut pyo3_ffi::PyObject {
    method as_non_null_ptr (line 71) | pub fn as_non_null_ptr(&self) -> core::ptr::NonNull<pyo3_ffi::PyObject> {
    method as_bytes (line 77) | pub fn as_bytes(&self) -> &'static [u8] {
    method as_str (line 89) | pub fn as_str(&self) -> Option<&'static str> {
    method as_str (line 101) | pub fn as_str(&self) -> Option<&'static str> {
  method eq (line 22) | fn eq(&self, other: &Self) -> bool {

FILE: src/ffi/pynoneref.rs
  type PyNoneRef (line 6) | pub(crate) struct PyNoneRef {
    method from_ptr_unchecked (line 22) | pub(crate) unsafe fn from_ptr_unchecked(ptr: *mut pyo3_ffi::PyObject) ...
    method as_ptr (line 34) | pub fn as_ptr(&self) -> *mut pyo3_ffi::PyObject {
    method as_non_null_ptr (line 40) | pub fn as_non_null_ptr(&self) -> core::ptr::NonNull<pyo3_ffi::PyObject> {
    method none (line 45) | pub fn none() -> Self {
  method eq (line 14) | fn eq(&self, other: &Self) -> bool {

FILE: src/ffi/pystrref/avx512.rs
  function create_str_impl_avx512vl (line 13) | pub(crate) unsafe fn create_str_impl_avx512vl(buf: &str) -> *mut crate::...

FILE: src/ffi/pystrref/object.rs
  function to_str_via_ffi (line 11) | fn to_str_via_ffi(op: *mut PyObject) -> Option<&'static str> {
  type StrDeserializer (line 25) | pub type StrDeserializer = unsafe fn(&str) -> *mut PyObject;
  function set_str_create_fn (line 30) | pub fn set_str_create_fn() {
  constant STATE_KIND_SHIFT (line 40) | const STATE_KIND_SHIFT: usize = 8;
  constant STATE_KIND_SHIFT (line 43) | const STATE_KIND_SHIFT: usize = 2;
  constant STATE_KIND_MASK (line 46) | const STATE_KIND_MASK: u32 = 7 << STATE_KIND_SHIFT;
  constant STATE_COMPACT_ASCII (line 49) | const STATE_COMPACT_ASCII: u32 =
  type PyStrRefError (line 52) | pub(crate) enum PyStrRefError {
  type PyStrRef (line 58) | pub(crate) struct PyStrRef {
    method from_ptr (line 73) | pub fn from_ptr(ptr: *mut pyo3_ffi::PyObject) -> Result<Self, PyStrRef...
    method from_ptr_unchecked (line 88) | pub unsafe fn from_ptr_unchecked(ptr: *mut pyo3_ffi::PyObject) -> Self {
    method empty (line 99) | pub fn empty() -> Self {
    method as_ptr (line 108) | pub fn as_ptr(&self) -> *mut pyo3_ffi::PyObject {
    method as_non_null_ptr (line 112) | pub fn as_non_null_ptr(&self) -> NonNull<PyObject> {
    method from_str_with_hash (line 118) | pub fn from_str_with_hash(buf: &str) -> Self {
    method from_str (line 126) | pub fn from_str(buf: &str) -> Self {
    method from_str (line 143) | pub fn from_str(buf: &str) -> Self {
    method hash (line 162) | pub fn hash(&self) -> crate::ffi::Py_hash_t {
    method set_hash (line 170) | fn set_hash(&mut self) {
    method set_hash (line 191) | fn set_hash(&mut self) {
    method as_str (line 204) | pub fn as_str(&self) -> Option<&'static str> {
    method as_str (line 227) | pub fn as_str(&self) -> Option<&'static str> {
  method eq (line 66) | fn eq(&self, other: &Self) -> bool {
  type PyStrSubclassRef (line 233) | pub(crate) struct PyStrSubclassRef {
    method from_ptr_unchecked (line 238) | pub unsafe fn from_ptr_unchecked(ptr: *mut PyObject) -> PyStrSubclassR...
    method as_ptr (line 248) | pub fn as_ptr(&self) -> *mut pyo3_ffi::PyObject {
    method as_str (line 253) | pub fn as_str(&self) -> Option<&'static str> {

FILE: src/ffi/pystrref/pyunicode_new.rs
  function pyunicode_ascii (line 17) | pub(crate) fn pyunicode_ascii(buf: *const u8, num_chars: usize) -> *mut ...
  function pyunicode_onebyte (line 30) | pub(crate) fn pyunicode_onebyte(buf: &str, num_chars: usize) -> *mut PyO...
  function pyunicode_twobyte (line 45) | pub(crate) fn pyunicode_twobyte(buf: &str, num_chars: usize) -> *mut PyO...
  function pyunicode_fourbyte (line 60) | pub(crate) fn pyunicode_fourbyte(buf: &str, num_chars: usize) -> *mut Py...

FILE: src/ffi/pystrref/scalar.rs
  function str_impl_kind_scalar (line 9) | pub(crate) unsafe fn str_impl_kind_scalar(buf: &str) -> *mut crate::ffi:...

FILE: src/ffi/pytupleref.rs
  type PyTupleRef (line 6) | pub(crate) struct PyTupleRef {
    method with_capacity (line 21) | pub fn with_capacity(cap: usize) -> Self {
    method from_ptr_unchecked (line 30) | pub unsafe fn from_ptr_unchecked(ptr: *mut pyo3_ffi::PyObject) -> Self {
    method as_ptr (line 45) | pub fn as_ptr(&self) -> *mut pyo3_ffi::PyObject {
    method as_non_null_ptr (line 51) | pub fn as_non_null_ptr(&self) -> core::ptr::NonNull<pyo3_ffi::PyObject> {
    method get (line 55) | pub fn get(&self, i: usize) -> *mut pyo3_ffi::PyObject {
    method set (line 60) | pub fn set(&mut self, i: usize, val: *mut pyo3_ffi::PyObject) {
    method len (line 67) | pub fn len(&self) -> usize {
  method eq (line 14) | fn eq(&self, other: &Self) -> bool {

FILE: src/ffi/pyuuidref.rs
  type PyUuidRef (line 8) | pub(crate) struct PyUuidRef {
    method from_ptr_unchecked (line 23) | pub(crate) unsafe fn from_ptr_unchecked(ptr: *mut pyo3_ffi::PyObject) ...
    method value (line 34) | pub(crate) fn value(&self) -> u128 {
  method eq (line 16) | fn eq(&self, other: &Self) -> bool {

FILE: src/ffi/utf8.rs
  function is_valid_utf8 (line 5) | pub(crate) fn is_valid_utf8(buf: &[u8]) -> bool {
  function is_valid_utf8 (line 14) | pub(crate) fn is_valid_utf8(buf: &[u8]) -> bool {
  function is_valid_utf8 (line 19) | pub(crate) fn is_valid_utf8(buf: &[u8]) -> bool {
  function is_valid_utf8 (line 24) | pub(crate) fn is_valid_utf8(buf: &[u8]) -> bool {

FILE: src/lib.rs
  function orjson_init_exec (line 99) | pub(crate) unsafe extern "C" fn orjson_init_exec(mptr: *mut PyObject) ->...
  function PyInit_orjson (line 181) | pub(crate) unsafe extern "C" fn PyInit_orjson() -> *mut PyModuleDef {
  function loads (line 229) | pub(crate) unsafe extern "C" fn loads(_self: *mut PyObject, obj: *mut Py...
  function dumps (line 248) | pub(crate) unsafe extern "C" fn dumps(

FILE: src/opt.rs
  type Opt (line 4) | pub(crate) type Opt = u32;
  constant INDENT_2 (line 6) | pub(crate) const INDENT_2: Opt = 1;
  constant NAIVE_UTC (line 7) | pub(crate) const NAIVE_UTC: Opt = 1 << 1;
  constant NON_STR_KEYS (line 8) | pub(crate) const NON_STR_KEYS: Opt = 1 << 2;
  constant OMIT_MICROSECONDS (line 9) | pub(crate) const OMIT_MICROSECONDS: Opt = 1 << 3;
  constant SERIALIZE_NUMPY (line 10) | pub(crate) const SERIALIZE_NUMPY: Opt = 1 << 4;
  constant SORT_KEYS (line 11) | pub(crate) const SORT_KEYS: Opt = 1 << 5;
  constant STRICT_INTEGER (line 12) | pub(crate) const STRICT_INTEGER: Opt = 1 << 6;
  constant UTC_Z (line 13) | pub(crate) const UTC_Z: Opt = 1 << 7;
  constant PASSTHROUGH_SUBCLASS (line 14) | pub(crate) const PASSTHROUGH_SUBCLASS: Opt = 1 << 8;
  constant PASSTHROUGH_DATETIME (line 15) | pub(crate) const PASSTHROUGH_DATETIME: Opt = 1 << 9;
  constant APPEND_NEWLINE (line 16) | pub(crate) const APPEND_NEWLINE: Opt = 1 << 10;
  constant PASSTHROUGH_DATACLASS (line 17) | pub(crate) const PASSTHROUGH_DATACLASS: Opt = 1 << 11;
  constant SERIALIZE_DATACLASS (line 20) | pub(crate) const SERIALIZE_DATACLASS: Opt = 0;
  constant SERIALIZE_UUID (line 21) | pub(crate) const SERIALIZE_UUID: Opt = 0;
  constant SORT_OR_NON_STR_KEYS (line 23) | pub(crate) const SORT_OR_NON_STR_KEYS: Opt = SORT_KEYS | NON_STR_KEYS;
  constant NOT_PASSTHROUGH (line 25) | pub(crate) const NOT_PASSTHROUGH: Opt =
  constant MAX_OPT (line 29) | pub(crate) const MAX_OPT: i32 = (APPEND_NEWLINE

FILE: src/serialize/buffer.rs
  constant BUFFER_LENGTH (line 7) | const BUFFER_LENGTH: usize = 64 - core::mem::size_of::<usize>();
  type SmallFixedBuffer (line 11) | pub(crate) struct SmallFixedBuffer {
    method new (line 18) | pub fn new() -> Self {
    method as_ptr (line 26) | pub fn as_ptr(&self) -> *const u8 {
    method len (line 31) | pub fn len(&self) -> usize {
  method advance_mut (line 38) | unsafe fn advance_mut(&mut self, cnt: usize) {
  method chunk_mut (line 43) | fn chunk_mut(&mut self) -> &mut UninitSlice {
  method remaining_mut (line 48) | fn remaining_mut(&self) -> usize {
  method put_u8 (line 53) | fn put_u8(&mut self, value: u8) {
  method put_slice (line 62) | fn put_slice(&mut self, src: &[u8]) {

FILE: src/serialize/error.rs
  type SerializeError (line 7) | pub(crate) enum SerializeError {
    method fmt (line 29) | fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {

FILE: src/serialize/obtype.rs
  type ObType (line 14) | pub(crate) enum ObType {
  function pyobject_to_obtype (line 36) | pub(crate) fn pyobject_to_obtype(obj: *mut crate::ffi::PyObject, opts: O...
  function pyobject_to_obtype_unlikely (line 62) | pub(crate) fn pyobject_to_obtype_unlikely(

FILE: src/serialize/per_type/dataclass.rs
  type DataclassGenericSerializer (line 19) | pub(crate) struct DataclassGenericSerializer<'a> {
  function new (line 24) | pub fn new(previous: &'a PyObjectSerializer) -> Self {
  method serialize (line 31) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DataclassFastSerializer (line 68) | pub(crate) struct DataclassFastSerializer {
    method new (line 75) | pub fn new(
  method serialize (line 90) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DataclassFallbackSerializer (line 146) | pub(crate) struct DataclassFallbackSerializer {
    method new (line 153) | pub fn new(
  method serialize (line 169) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>

FILE: src/serialize/per_type/datetime.rs
  type Date (line 34) | pub(crate) struct Date {
    method new (line 39) | pub fn new(ptr: *mut crate::ffi::PyObject) -> Self {
    method write_buf (line 44) | pub fn write_buf<B>(&self, buf: &mut B)
  method serialize (line 76) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type TimeError (line 86) | pub(crate) enum TimeError {
  type Time (line 90) | pub(crate) struct Time {
    method new (line 96) | pub fn new(ptr: *mut crate::ffi::PyObject, opts: Opt) -> Self {
    method write_buf (line 104) | pub fn write_buf<B>(&self, buf: &mut B) -> Result<(), TimeError>
  method serialize (line 128) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DateTime (line 140) | pub(crate) struct DateTime {
    method new (line 146) | pub fn new(ptr: *mut crate::ffi::PyObject, opts: Opt) -> Self {
  method nanosecond (line 175) | fn nanosecond(&self) -> u32 {
  method has_tz (line 179) | fn has_tz(&self) -> bool {
  method slow_offset (line 184) | fn slow_offset(&self) -> Result<Offset, DateTimeError> {
  method offset (line 221) | fn offset(&self) -> Result<Offset, DateTimeError> {
  method serialize (line 243) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>

FILE: src/serialize/per_type/datetimelike.rs
  type DateTimeError (line 6) | pub(crate) enum DateTimeError {
  type Offset (line 32) | pub(crate) struct Offset {
  type DateTimeLike (line 41) | pub(crate) trait DateTimeLike {
    method year (line 43) | fn year(&self) -> i32;
    method month (line 45) | fn month(&self) -> u8;
    method day (line 47) | fn day(&self) -> u8;
    method hour (line 49) | fn hour(&self) -> u8;
    method minute (line 51) | fn minute(&self) -> u8;
    method second (line 53) | fn second(&self) -> u8;
    method microsecond (line 55) | fn microsecond(&self) -> u32;
    method nanosecond (line 57) | fn nanosecond(&self) -> u32;
    method has_tz (line 60) | fn has_tz(&self) -> bool;
    method slow_offset (line 63) | fn slow_offset(&self) -> Result<Offset, DateTimeError>;
    method offset (line 66) | fn offset(&self) -> Result<Offset, DateTimeError>;
    method write_buf (line 71) | fn write_buf<B>(&self, buf: &mut B, opts: Opt) -> Result<(), DateTimeE...

FILE: src/serialize/per_type/default.rs
  type DefaultSerializer (line 10) | pub(crate) struct DefaultSerializer<'a> {
  function new (line 15) | pub fn new(previous: &'a PyObjectSerializer) -> Self {
  method serialize (line 23) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>

FILE: src/serialize/per_type/dict.rs
  type ZeroDictSerializer (line 26) | pub(crate) struct ZeroDictSerializer;
    method new (line 29) | pub const fn new() -> Self {
  method serialize (line 36) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DictGenericSerializer (line 44) | pub(crate) struct DictGenericSerializer {
    method new (line 52) | pub fn new(
  method serialize (line 67) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type Dict (line 234) | pub(crate) struct Dict {
  method serialize (line 242) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DictSortedKey (line 290) | pub(crate) struct DictSortedKey {
  method serialize (line 298) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  function non_str_str (line 356) | fn non_str_str(key: PyStrRef) -> Result<String, SerializeError> {
  function non_str_str_subclass (line 369) | fn non_str_str_subclass(key: PyStrSubclassRef) -> Result<String, Seriali...
  function non_str_date (line 381) | fn non_str_date(key: *mut crate::ffi::PyObject) -> Result<String, Serial...
  function non_str_datetime (line 389) | fn non_str_datetime(
  function non_str_time (line 404) | fn non_str_time(
  function non_str_uuid (line 419) | fn non_str_uuid(key: PyUuidRef) -> Result<String, SerializeError> {
  function non_str_float (line 429) | fn non_str_float(key: *mut crate::ffi::PyObject) -> Result<String, Seria...
  function non_str_int (line 440) | fn non_str_int(key: *mut crate::ffi::PyObject) -> Result<String, Seriali...
  function sort_dict_items (line 456) | fn sort_dict_items(items: &mut SmallVec<[(&str, *mut crate::ffi::PyObjec...
  type DictNonStrKey (line 460) | pub(crate) struct DictNonStrKey {
    method pyobject_to_string (line 467) | fn pyobject_to_string(
  method serialize (line 513) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>

FILE: src/serialize/per_type/float.rs
  type FloatSerializer (line 8) | pub(crate) struct FloatSerializer {
    method new (line 13) | pub fn new(ptr: PyFloatRef) -> Self {
  method serialize (line 20) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>

FILE: src/serialize/per_type/fragment.rs
  type FragmentSerializer (line 10) | pub(crate) struct FragmentSerializer {
    method new (line 15) | pub fn new(ob: PyFragmentRef) -> Self {
  method serialize (line 23) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>

FILE: src/serialize/per_type/int.rs
  constant STRICT_INT_MIN (line 11) | const STRICT_INT_MIN: i64 = -9007199254740991;
  constant STRICT_INT_MAX (line 12) | const STRICT_INT_MAX: i64 = 9007199254740991;
  type IntSerializer (line 14) | pub(crate) struct IntSerializer {
    method new (line 20) | pub fn new(ob: PyIntRef, opts: Opt) -> Self {
  method serialize (line 28) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  method serialize (line 66) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>

FILE: src/serialize/per_type/list.rs
  type ZeroListSerializer (line 23) | pub(crate) struct ZeroListSerializer;
    method new (line 26) | pub const fn new() -> Self {
  method serialize (line 33) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type ListTupleSerializer (line 41) | pub(crate) struct ListTupleSerializer {
    method from_list (line 49) | pub fn from_list(
    method from_tuple (line 62) | pub fn from_tuple(
  method serialize (line 84) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>

FILE: src/serialize/per_type/none.rs
  type NoneSerializer (line 6) | pub(crate) struct NoneSerializer;
    method new (line 9) | pub const fn new() -> Self {
  method serialize (line 16) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>

FILE: src/serialize/per_type/numpy.rs
  type NumpySerializer (line 23) | pub(crate) struct NumpySerializer<'a> {
  function new (line 28) | pub fn new(previous: &'a PyObjectSerializer) -> Self {
  method serialize (line 37) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  function is_numpy_scalar (line 69) | pub(crate) fn is_numpy_scalar(ob_type: *mut PyTypeObject) -> bool {
  function is_numpy_array (line 92) | pub(crate) fn is_numpy_array(ob_type: *mut PyTypeObject) -> bool {
  type PyCapsule (line 103) | pub(crate) struct PyCapsule {
  constant NPY_ARRAY_C_CONTIGUOUS (line 114) | const NPY_ARRAY_C_CONTIGUOUS: c_int = 0x1;
  constant NPY_ARRAY_NOTSWAPPED (line 115) | const NPY_ARRAY_NOTSWAPPED: c_int = 0x200;
  type PyArrayInterface (line 118) | pub(crate) struct PyArrayInterface {
  type ItemType (line 131) | pub(crate) enum ItemType {
    method find (line 148) | fn find(array: *mut PyArrayInterface, ptr: *mut PyObject) -> Option<It...
  type PyArrayError (line 171) | pub(crate) enum PyArrayError {
  type NumpyArray (line 185) | pub(crate) struct NumpyArray {
    method new (line 199) | pub fn new(ptr: *mut PyObject, opts: Opt) -> Result<Self, PyArrayError> {
    method child_from_parent (line 249) | fn child_from_parent(&self, position: Vec<isize>, num_children: usize)...
    method build (line 264) | fn build(&mut self) {
    method data (line 281) | fn data(&self) -> *const c_void {
    method num_items (line 292) | fn num_items(&self) -> usize {
    method dimensions (line 296) | fn dimensions(&self) -> usize {
    method shape (line 300) | fn shape(&self) -> &[isize] {
    method strides (line 304) | fn strides(&self) -> &[isize] {
  method drop (line 310) | fn drop(&mut self) {
  method serialize (line 322) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyF64Array (line 398) | struct NumpyF64Array<'a> {
  function new (line 403) | fn new(data: &'a [f64]) -> Self {
  method serialize (line 411) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DataTypeF64 (line 424) | pub(crate) struct DataTypeF64 {
  method serialize (line 430) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyF32Array (line 439) | struct NumpyF32Array<'a> {
  function new (line 444) | fn new(data: &'a [f32]) -> Self {
  method serialize (line 452) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DataTypeF32 (line 465) | struct DataTypeF32 {
  method serialize (line 471) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyF16Array (line 480) | struct NumpyF16Array<'a> {
  function new (line 485) | fn new(data: &'a [u16]) -> Self {
  method serialize (line 493) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DataTypeF16 (line 506) | struct DataTypeF16 {
  method serialize (line 513) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyU64Array (line 523) | struct NumpyU64Array<'a> {
  function new (line 528) | fn new(data: &'a [u64]) -> Self {
  method serialize (line 536) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DataTypeU64 (line 549) | pub(crate) struct DataTypeU64 {
  method serialize (line 555) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyU32Array (line 564) | struct NumpyU32Array<'a> {
  function new (line 569) | fn new(data: &'a [u32]) -> Self {
  method serialize (line 577) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DataTypeU32 (line 590) | pub(crate) struct DataTypeU32 {
  method serialize (line 596) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyU16Array (line 605) | struct NumpyU16Array<'a> {
  function new (line 610) | fn new(data: &'a [u16]) -> Self {
  method serialize (line 618) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DataTypeU16 (line 631) | pub(crate) struct DataTypeU16 {
  method serialize (line 637) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyI64Array (line 646) | struct NumpyI64Array<'a> {
  function new (line 651) | fn new(data: &'a [i64]) -> Self {
  method serialize (line 659) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DataTypeI64 (line 672) | pub(crate) struct DataTypeI64 {
  method serialize (line 678) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyI32Array (line 687) | struct NumpyI32Array<'a> {
  function new (line 692) | fn new(data: &'a [i32]) -> Self {
  method serialize (line 700) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DataTypeI32 (line 713) | pub(crate) struct DataTypeI32 {
  method serialize (line 719) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyI16Array (line 728) | struct NumpyI16Array<'a> {
  function new (line 733) | fn new(data: &'a [i16]) -> Self {
  method serialize (line 741) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DataTypeI16 (line 754) | pub(crate) struct DataTypeI16 {
  method serialize (line 760) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyI8Array (line 769) | struct NumpyI8Array<'a> {
  function new (line 774) | fn new(data: &'a [i8]) -> Self {
  method serialize (line 782) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DataTypeI8 (line 795) | pub(crate) struct DataTypeI8 {
  method serialize (line 801) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyU8Array (line 810) | struct NumpyU8Array<'a> {
  function new (line 815) | fn new(data: &'a [u8]) -> Self {
  method serialize (line 823) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DataTypeU8 (line 836) | pub(crate) struct DataTypeU8 {
  method serialize (line 842) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyBoolArray (line 851) | struct NumpyBoolArray<'a> {
  function new (line 856) | fn new(data: &'a [u8]) -> Self {
  method serialize (line 863) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DataTypeBool (line 876) | pub(crate) struct DataTypeBool {
  method serialize (line 882) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyScalar (line 890) | pub(crate) struct NumpyScalar {
    method new (line 896) | pub fn new(ptr: *mut PyObject, opts: Opt) -> Self {
  method serialize (line 905) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyInt8 (line 952) | pub(crate) struct NumpyInt8 {
  method serialize (line 960) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyInt16 (line 969) | pub(crate) struct NumpyInt16 {
  method serialize (line 977) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyInt32 (line 986) | pub(crate) struct NumpyInt32 {
  method serialize (line 994) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyInt64 (line 1003) | pub(crate) struct NumpyInt64 {
  method serialize (line 1011) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyUint8 (line 1020) | pub(crate) struct NumpyUint8 {
  method serialize (line 1028) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyUint16 (line 1037) | pub(crate) struct NumpyUint16 {
  method serialize (line 1045) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyUint32 (line 1054) | pub(crate) struct NumpyUint32 {
  method serialize (line 1062) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyUint64 (line 1071) | pub(crate) struct NumpyUint64 {
  method serialize (line 1079) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyFloat16 (line 1088) | pub(crate) struct NumpyFloat16 {
  method serialize (line 1096) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyFloat32 (line 1106) | pub(crate) struct NumpyFloat32 {
  method serialize (line 1114) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyFloat64 (line 1123) | pub(crate) struct NumpyFloat64 {
  method serialize (line 1131) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyBool (line 1140) | pub(crate) struct NumpyBool {
  method serialize (line 1148) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyDatetimeUnit (line 1161) | pub(crate) enum NumpyDatetimeUnit {
    method fmt (line 1181) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method from_pyobject (line 1247) | fn from_pyobject(ptr: *mut PyObject) -> Self {
    method datetime (line 1294) | fn datetime(self, val: i64, opts: Opt) -> Result<NumpyDatetime64Repr, ...
  type NumpyDateTimeError (line 1204) | enum NumpyDateTimeError {
    method into_serde_err (line 1211) | fn into_serde_err<T: ser::Error>(self) -> T {
  type NumpyDatetime64Array (line 1340) | struct NumpyDatetime64Array<'a> {
  function new (line 1347) | fn new(data: &'a [i64], unit: NumpyDatetimeUnit, opts: Opt) -> Self {
  method serialize (line 1354) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type NumpyDatetime64 (line 1371) | pub(crate) struct NumpyDatetime64 {
  type NumpyDatetime64Repr (line 1388) | struct NumpyDatetime64Repr {
  method nanosecond (line 1401) | fn nanosecond(&self) -> u32 {
  method microsecond (line 1406) | fn microsecond(&self) -> u32 {
  method has_tz (line 1410) | fn has_tz(&self) -> bool {
  method slow_offset (line 1414) | fn slow_offset(&self) -> Result<Offset, DateTimeError> {
  method offset (line 1418) | fn offset(&self) -> Result<Offset, DateTimeError> {
  method serialize (line 1425) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>

FILE: src/serialize/per_type/pybool.rs
  type BoolSerializer (line 8) | pub(crate) struct BoolSerializer {
    method new (line 13) | pub fn new(ob: PyBoolRef) -> Self {
  method serialize (line 20) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>

FILE: src/serialize/per_type/pyenum.rs
  type EnumSerializer (line 9) | pub(crate) struct EnumSerializer<'a> {
  function new (line 14) | pub fn new(previous: &'a PyObjectSerializer) -> Self {
  method serialize (line 21) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>

FILE: src/serialize/per_type/unicode.rs
  type StrSerializer (line 10) | pub(crate) struct StrSerializer {
    method new (line 15) | pub fn new(ptr: PyStrRef) -> Self {
  method serialize (line 22) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type StrSubclassSerializer (line 37) | pub(crate) struct StrSubclassSerializer {
    method new (line 42) | pub fn new(ptr: PyStrSubclassRef) -> Self {
  method serialize (line 49) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>

FILE: src/serialize/per_type/uuid.rs
  type UUID (line 9) | pub(crate) struct UUID {
    method new (line 14) | pub fn new(ptr: PyUuidRef) -> Self {
    method write_buf (line 19) | pub fn write_buf<B>(&self, buf: &mut B)
  method serialize (line 39) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>

FILE: src/serialize/serializer.rs
  function serialize (line 21) | pub(crate) fn serialize(
  type PyObjectSerializer (line 42) | pub(crate) struct PyObjectSerializer {
    method new (line 49) | pub fn new(
  method serialize (line 63) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>

FILE: src/serialize/state.rs
  constant RECURSION_SHIFT (line 6) | const RECURSION_SHIFT: usize = 24;
  constant RECURSION_MASK (line 7) | const RECURSION_MASK: u32 = 255 << RECURSION_SHIFT;
  constant DEFAULT_SHIFT (line 9) | const DEFAULT_SHIFT: usize = 16;
  constant DEFAULT_MASK (line 10) | const DEFAULT_MASK: u32 = 255 << DEFAULT_SHIFT;
  type SerializerState (line 14) | pub(crate) struct SerializerState {
    method new (line 23) | pub fn new(opts: Opt) -> Self {
    method opts (line 29) | pub fn opts(self) -> u32 {
    method recursion_limit (line 34) | pub fn recursion_limit(self) -> bool {
    method default_calls_limit (line 39) | pub fn default_calls_limit(self) -> bool {
    method copy_for_recursive_call (line 44) | pub fn copy_for_recursive_call(self) -> Self {
    method copy_for_default_call (line 53) | pub fn copy_for_default_call(self) -> Self {

FILE: src/serialize/writer/byteswriter.rs
  constant BUFFER_LENGTH (line 11) | const BUFFER_LENGTH: usize = 1024;
  constant BUFFER_LENGTH (line 14) | const BUFFER_LENGTH: usize = 4096;
  type BytesWriter (line 16) | pub(crate) struct BytesWriter {
    method default (line 27) | pub fn default() -> Self {
    method abort (line 42) | pub fn abort(&mut self) {
    method abort (line 47) | pub fn abort(&mut self) {
    method append_and_terminate (line 53) | fn append_and_terminate(&mut self, append: bool) {
    method finish (line 66) | pub fn finish(&mut self, append: bool) -> NonNull<PyObject> {
    method finish (line 80) | pub fn finish(&mut self, append: bool) -> NonNull<PyObject> {
    method buffer_ptr (line 95) | fn buffer_ptr(&self) -> *mut u8 {
    method buffer_ptr (line 101) | fn buffer_ptr(&self) -> *mut u8 {
    method resize (line 108) | pub fn resize(&mut self, len: usize) {
    method resize (line 120) | pub fn resize(&mut self, len: usize) {
    method grow (line 131) | fn grow(&mut self, len: usize) {
  method advance_mut (line 142) | unsafe fn advance_mut(&mut self, cnt: usize) {
  method chunk_mut (line 147) | fn chunk_mut(&mut self) -> &mut UninitSlice {
  method remaining_mut (line 157) | fn remaining_mut(&self) -> usize {
  method put_u8 (line 162) | fn put_u8(&mut self, value: u8) {
  method put_bytes (line 171) | fn put_bytes(&mut self, val: u8, cnt: usize) {
  method put_slice (line 180) | fn put_slice(&mut self, src: &[u8]) {
  type WriteExt (line 190) | pub(crate) trait WriteExt {
    method as_mut_buffer_ptr (line 192) | fn as_mut_buffer_ptr(&mut self) -> *mut u8 {
    method reserve (line 197) | fn reserve(&mut self, len: usize) {
    method as_mut_buffer_ptr (line 204) | fn as_mut_buffer_ptr(&mut self) -> *mut u8 {
    method reserve (line 209) | fn reserve(&mut self, len: usize) {

FILE: src/serialize/writer/formatter.rs
  type Formatter (line 18) | pub(crate) trait Formatter {
    method write_null (line 20) | fn write_null<W>(&mut self, writer: &mut W) -> io::Result<()>
    method write_bool (line 32) | fn write_bool<W>(&mut self, writer: &mut W, value: bool) -> io::Result...
    method write_i32 (line 44) | fn write_i32<W>(&mut self, writer: &mut W, value: i32) -> io::Result<()>
    method write_i64 (line 56) | fn write_i64<W>(&mut self, writer: &mut W, value: i64) -> io::Result<()>
    method write_u32 (line 68) | fn write_u32<W>(&mut self, writer: &mut W, value: u32) -> io::Result<()>
    method write_u64 (line 80) | fn write_u64<W>(&mut self, writer: &mut W, value: u64) -> io::Result<()>
    method write_f32 (line 92) | fn write_f32<W>(&mut self, writer: &mut W, value: f32) -> io::Result<()>
    method write_f64 (line 104) | fn write_f64<W>(&mut self, writer: &mut W, value: f64) -> io::Result<()>
    method begin_array (line 116) | fn begin_array<W>(&mut self, writer: &mut W) -> io::Result<()>
    method end_array (line 128) | fn end_array<W>(&mut self, writer: &mut W) -> io::Result<()>
    method begin_array_value (line 140) | fn begin_array_value<W>(&mut self, writer: &mut W, first: bool) -> io:...
    method end_array_value (line 152) | fn end_array_value<W>(&mut self, _writer: &mut W) -> io::Result<()>
    method begin_object (line 160) | fn begin_object<W>(&mut self, writer: &mut W) -> io::Result<()>
    method end_object (line 172) | fn end_object<W>(&mut self, writer: &mut W) -> io::Result<()>
    method begin_object_key (line 184) | fn begin_object_key<W>(&mut self, writer: &mut W, first: bool) -> io::...
    method end_object_key (line 198) | fn end_object_key<W>(&mut self, _writer: &mut W) -> io::Result<()>
    method begin_object_value (line 206) | fn begin_object_value<W>(&mut self, writer: &mut W) -> io::Result<()>
    method end_object_value (line 218) | fn end_object_value<W>(&mut self, _writer: &mut W) -> io::Result<()>
    method begin_array (line 247) | fn begin_array<W>(&mut self, writer: &mut W) -> io::Result<()>
    method end_array (line 261) | fn end_array<W>(&mut self, writer: &mut W) -> io::Result<()>
    method begin_array_value (line 280) | fn begin_array_value<W>(&mut self, writer: &mut W, first: bool) -> io:...
    method end_array_value (line 295) | fn end_array_value<W>(&mut self, _writer: &mut W) -> io::Result<()>
    method begin_object (line 304) | fn begin_object<W>(&mut self, writer: &mut W) -> io::Result<()>
    method end_object (line 319) | fn end_object<W>(&mut self, writer: &mut W) -> io::Result<()>
    method begin_object_key (line 339) | fn begin_object_key<W>(&mut self, writer: &mut W, first: bool) -> io::...
    method begin_object_value (line 353) | fn begin_object_value<W>(&mut self, writer: &mut W) -> io::Result<()>
    method end_object_value (line 365) | fn end_object_value<W>(&mut self, _writer: &mut W) -> io::Result<()>
  type CompactFormatter (line 226) | pub(crate) struct CompactFormatter;
  type PrettyFormatter (line 230) | pub(crate) struct PrettyFormatter {
    method new (line 237) | pub const fn new() -> Self {

FILE: src/serialize/writer/json.rs
  type Serializer (line 10) | pub(crate) struct Serializer<W, F = CompactFormatter> {
  function new (line 20) | pub fn new(writer: W) -> Self {
  function pretty (line 30) | pub fn pretty(writer: W) -> Self {
  function with_formatter (line 41) | pub fn with_formatter(writer: W, formatter: F) -> Self {
  type Ok (line 51) | type Ok = ();
  type Error (line 52) | type Error = Error;
  type SerializeSeq (line 54) | type SerializeSeq = Compound<'a, W, F>;
  type SerializeTuple (line 55) | type SerializeTuple = Impossible<(), Error>;
  type SerializeTupleStruct (line 56) | type SerializeTupleStruct = Impossible<(), Error>;
  type SerializeTupleVariant (line 57) | type SerializeTupleVariant = Impossible<(), Error>;
  type SerializeMap (line 58) | type SerializeMap = Compound<'a, W, F>;
  type SerializeStruct (line 59) | type SerializeStruct = Impossible<(), Error>;
  type SerializeStructVariant (line 60) | type SerializeStructVariant = Impossible<(), Error>;
  function serialize_bool (line 63) | fn serialize_bool(self, value: bool) -> Result<()> {
  function serialize_i8 (line 69) | fn serialize_i8(self, _value: i8) -> Result<()> {
  function serialize_i16 (line 73) | fn serialize_i16(self, _value: i16) -> Result<()> {
  function serialize_i32 (line 78) | fn serialize_i32(self, value: i32) -> Result<()> {
  function serialize_i64 (line 85) | fn serialize_i64(self, value: i64) -> Result<()> {
  function serialize_i128 (line 91) | fn serialize_i128(self, _value: i128) -> Result<()> {
  function serialize_u8 (line 95) | fn serialize_u8(self, _value: u8) -> Result<()> {
  function serialize_u16 (line 99) | fn serialize_u16(self, _value: u16) -> Result<()> {
  function serialize_u32 (line 104) | fn serialize_u32(self, value: u32) -> Result<()> {
  function serialize_u64 (line 111) | fn serialize_u64(self, value: u64) -> Result<()> {
  function serialize_u128 (line 117) | fn serialize_u128(self, _value: u128) -> Result<()> {
  function serialize_f32 (line 122) | fn serialize_f32(self, value: f32) -> Result<()> {
  function serialize_f64 (line 133) | fn serialize_f64(self, value: f64) -> Result<()> {
  function serialize_char (line 144) | fn serialize_char(self, _value: char) -> Result<()> {
  function serialize_str (line 149) | fn serialize_str(self, value: &str) -> Result<()> {
  function serialize_bytes (line 155) | fn serialize_bytes(self, value: &[u8]) -> Result<()> {
  function serialize_unit (line 164) | fn serialize_unit(self) -> Result<()> {
  function serialize_unit_struct (line 171) | fn serialize_unit_struct(self, name: &'static str) -> Result<()> {
  function serialize_unit_variant (line 182) | fn serialize_unit_variant(
  function serialize_newtype_struct (line 191) | fn serialize_newtype_struct<T>(self, _name: &'static str, _value: &T) ->...
  function serialize_newtype_variant (line 198) | fn serialize_newtype_variant<T>(
  function serialize_none (line 212) | fn serialize_none(self) -> Result<()> {
  function serialize_some (line 217) | fn serialize_some<T>(self, value: &T) -> Result<()>
  function serialize_seq (line 225) | fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq> {
  function serialize_tuple (line 235) | fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple> {
  function serialize_tuple_struct (line 239) | fn serialize_tuple_struct(
  function serialize_tuple_variant (line 247) | fn serialize_tuple_variant(
  function serialize_map (line 258) | fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap> {
  function serialize_struct (line 268) | fn serialize_struct(self, _name: &'static str, _len: usize) -> Result<Se...
  function serialize_struct_variant (line 272) | fn serialize_struct_variant(
  type State (line 284) | pub(crate) enum State {
  type Compound (line 289) | pub(crate) struct Compound<'a, W: 'a, F: 'a> {
  type Ok (line 299) | type Ok = ();
  type Error (line 300) | type Error = Error;
  function serialize_element (line 303) | fn serialize_element<T>(&mut self, value: &T) -> Result<()>
  function end (line 322) | fn end(self) -> Result<()> {
  type Ok (line 333) | type Ok = ();
  type Error (line 334) | type Error = Error;
  function serialize_entry (line 336) | fn serialize_entry<K, V>(&mut self, _key: &K, _value: &V) -> Result<()>
  function serialize_key (line 345) | fn serialize_key<T>(&mut self, key: &T) -> Result<()>
  function serialize_value (line 365) | fn serialize_value<T>(&mut self, value: &T) -> Result<()>
  function end (line 382) | fn end(self) -> Result<()> {
  type MapKeySerializer (line 389) | struct MapKeySerializer<'a, W: 'a, F: 'a> {
  type Ok (line 398) | type Ok = ();
  type Error (line 399) | type Error = Error;
  type SerializeSeq (line 400) | type SerializeSeq = Impossible<(), Error>;
  type SerializeTuple (line 401) | type SerializeTuple = Impossible<(), Error>;
  type SerializeTupleStruct (line 402) | type SerializeTupleStruct = Impossible<(), Error>;
  type SerializeTupleVariant (line 403) | type SerializeTupleVariant = Impossible<(), Error>;
  type SerializeMap (line 404) | type SerializeMap = Impossible<(), Error>;
  type SerializeStruct (line 405) | type SerializeStruct = Impossible<(), Error>;
  type SerializeStructVariant (line 406) | type SerializeStructVariant = Impossible<(), Error>;
  function serialize_str (line 409) | fn serialize_str(self, value: &str) -> Result<()> {
  function serialize_unit_variant (line 413) | fn serialize_unit_variant(
  function serialize_newtype_struct (line 422) | fn serialize_newtype_struct<T>(self, _name: &'static str, _value: &T) ->...
  function serialize_bool (line 428) | fn serialize_bool(self, _value: bool) -> Result<()> {
  function serialize_i8 (line 432) | fn serialize_i8(self, _value: i8) -> Result<()> {
  function serialize_i16 (line 436) | fn serialize_i16(self, _value: i16) -> Result<()> {
  function serialize_i32 (line 440) | fn serialize_i32(self, _value: i32) -> Result<()> {
  function serialize_i64 (line 444) | fn serialize_i64(self, _value: i64) -> Result<()> {
  function serialize_i128 (line 448) | fn serialize_i128(self, _value: i128) -> Result<()> {
  function serialize_u8 (line 452) | fn serialize_u8(self, _value: u8) -> Result<()> {
  function serialize_u16 (line 456) | fn serialize_u16(self, _value: u16) -> Result<()> {
  function serialize_u32 (line 460) | fn serialize_u32(self, _value: u32) -> Result<()> {
  function serialize_u64 (line 464) | fn serialize_u64(self, _value: u64) -> Result<()> {
  function serialize_u128 (line 468) | fn serialize_u128(self, _value: u128) -> Result<()> {
  function serialize_f32 (line 472) | fn serialize_f32(self, _value: f32) -> Result<()> {
  function serialize_f64 (line 476) | fn serialize_f64(self, _value: f64) -> Result<()> {
  function serialize_char (line 480) | fn serialize_char(self, _value: char) -> Result<()> {
  function serialize_bytes (line 484) | fn serialize_bytes(self, _value: &[u8]) -> Result<()> {
  function serialize_unit (line 488) | fn serialize_unit(self) -> Result<()> {
  function serialize_unit_struct (line 492) | fn serialize_unit_struct(self, _name: &'static str) -> Result<()> {
  function serialize_newtype_variant (line 496) | fn serialize_newtype_variant<T>(
  function serialize_none (line 509) | fn serialize_none(self) -> Result<()> {
  function serialize_some (line 513) | fn serialize_some<T>(self, _value: &T) -> Result<()>
  function serialize_seq (line 520) | fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq> {
  function serialize_tuple (line 524) | fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple> {
  function serialize_tuple_struct (line 528) | fn serialize_tuple_struct(
  function serialize_tuple_variant (line 536) | fn serialize_tuple_variant(
  function serialize_map (line 546) | fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap> {
  function serialize_struct (line 550) | fn serialize_struct(self, _name: &'static str, _len: usize) -> Result<Se...
  function serialize_struct_variant (line 554) | fn serialize_struct_variant(
  type StrFormatter (line 572) | type StrFormatter = unsafe fn(*mut u8, *const u8, usize) -> usize;
  function set_str_formatter_fn (line 578) | pub(crate) fn set_str_formatter_fn() {
  function format_escaped_str (line 589) | fn format_escaped_str<W>(writer: &mut W, value: &str)
  function format_escaped_str (line 608) | fn format_escaped_str<W>(writer: &mut W, value: &str)
  function format_escaped_str (line 631) | fn format_escaped_str<W>(writer: &mut W, value: &str)
  function format_escaped_str (line 650) | fn format_escaped_str<W>(writer: &mut W, value: &str)
  function to_writer (line 668) | pub(crate) fn to_writer<W, T>(writer: W, value: &T) -> Result<()>
  function to_writer_pretty (line 678) | pub(crate) fn to_writer_pretty<W, T>(writer: W, value: &T) -> Result<()>

FILE: src/serialize/writer/num.rs
  function write_integer_u32 (line 8) | pub(crate) fn write_integer_u32<B>(buf: &mut B, val: u32)
  function write_integer_i32 (line 16) | pub(crate) fn write_integer_i32<B>(buf: &mut B, val: i32)
  function write_integer_u64 (line 24) | pub(crate) fn write_integer_u64<B>(buf: &mut B, val: u64)
  function write_integer_i64 (line 32) | pub(crate) fn write_integer_i64<B>(buf: &mut B, val: i64)
  function write_integer (line 40) | fn write_integer<B, V: itoap::Integer>(buf: &mut B, val: V)
  function write_float32 (line 52) | pub(crate) fn write_float32<B>(buf: &mut B, val: f32)
  function write_float64 (line 65) | pub(crate) fn write_float64<B>(buf: &mut B, val: f64)
  function write_finite_float (line 77) | fn write_finite_float<B, F: zmij::Float>(buf: &mut B, val: F)

FILE: src/serialize/writer/str/avx512.rs
  function format_escaped_str_impl_512vl (line 11) | pub(crate) unsafe fn format_escaped_str_impl_512vl(

FILE: src/serialize/writer/str/escape.rs
  constant NEED_ESCAPED (line 30) | pub(crate) const NEED_ESCAPED: [u8; 256] = [
  constant QUOTE_TAB (line 41) | pub(crate) const QUOTE_TAB: [[u8; 8]; 96] = [

FILE: src/serialize/writer/str/generic.rs
  function format_escaped_str_impl_generic_128 (line 9) | pub(crate) unsafe fn format_escaped_str_impl_generic_128(

FILE: src/serialize/writer/str/scalar.rs
  function format_escaped_str_scalar (line 22) | pub(crate) unsafe fn format_escaped_str_scalar(

FILE: src/serialize/writer/str/sse2.rs
  function format_escaped_str_impl_sse2_128 (line 12) | pub(crate) unsafe fn format_escaped_str_impl_sse2_128(

FILE: src/typeref.rs
  function look_up_type_object (line 64) | unsafe fn look_up_type_object(module_name: &CStr, member_name: &CStr) ->...
  function look_up_datetime (line 76) | unsafe fn look_up_datetime() {
  function look_up_datetime (line 91) | unsafe fn look_up_datetime() {
  function init_typerefs (line 102) | pub(crate) fn init_typerefs() {
  function _init_typerefs_impl (line 108) | fn _init_typerefs_impl() -> bool {
  type NumpyTypes (line 177) | pub(crate) struct NumpyTypes {
  function look_up_numpy_type (line 196) | unsafe fn look_up_numpy_type(
  function load_numpy_types (line 209) | pub(crate) fn load_numpy_types() -> Box<Option<NonNull<NumpyTypes>>> {

FILE: src/util.rs
  constant INVALID_STR (line 4) | pub(crate) const INVALID_STR: &str = "str is not valid UTF-8: surrogates...
  function usize_to_isize (line 286) | pub(crate) fn usize_to_isize(val: usize) -> isize {
  function isize_to_usize (line 292) | pub(crate) fn isize_to_usize(val: isize) -> usize {

FILE: test/test_api.py
  function default (line 18) | def default(obj):
  class TestApi (line 22) | class TestApi:
    method test_loads_trailing (line 23) | def test_loads_trailing(self):
    method test_loads_trailing_invalid (line 29) | def test_loads_trailing_invalid(self):
    method test_simple_json (line 35) | def test_simple_json(self):
    method test_simple_round_trip (line 42) | def test_simple_round_trip(self):
    method test_loads_type (line 49) | def test_loads_type(self):
    method test_loads_recursion_partial (line 56) | def test_loads_recursion_partial(self):
    method test_loads_recursion_valid_limit_array (line 62) | def test_loads_recursion_valid_limit_array(self):
    method test_loads_recursion_valid_limit_object (line 70) | def test_loads_recursion_valid_limit_object(self):
    method test_loads_recursion_valid_limit_mixed (line 78) | def test_loads_recursion_valid_limit_mixed(self):
    method test_loads_recursion_valid_excessive_array (line 86) | def test_loads_recursion_valid_excessive_array(self):
    method test_loads_recursion_valid_limit_array_pretty (line 94) | def test_loads_recursion_valid_limit_array_pretty(self):
    method test_loads_recursion_valid_limit_object_pretty (line 102) | def test_loads_recursion_valid_limit_object_pretty(self):
    method test_loads_recursion_valid_limit_mixed_pretty (line 110) | def test_loads_recursion_valid_limit_mixed_pretty(self):
    method test_loads_recursion_valid_excessive_array_pretty (line 118) | def test_loads_recursion_valid_excessive_array_pretty(self):
    method test_version (line 126) | def test_version(self):
    method test_valueerror (line 132) | def test_valueerror(self):
    method test_optional_none (line 139) | def test_optional_none(self):
    method test_option_not_int (line 148) | def test_option_not_int(self):
    method test_option_invalid_int (line 155) | def test_option_invalid_int(self):
    method test_option_range_low (line 162) | def test_option_range_low(self):
    method test_option_range_high (line 169) | def test_option_range_high(self):
    method test_opts_multiple (line 176) | def test_opts_multiple(self):
    method test_default_positional (line 188) | def test_default_positional(self):
    method test_default_unknown_kwarg (line 197) | def test_default_unknown_kwarg(self):
    method test_default_empty_kwarg (line 204) | def test_default_empty_kwarg(self):
    method test_default_twice (line 210) | def test_default_twice(self):
    method test_option_twice (line 217) | def test_option_twice(self):
    method test_option_mixed (line 224) | def test_option_mixed(self):
    method test_dumps_signature (line 242) | def test_dumps_signature(self):
    method test_loads_signature (line 254) | def test_loads_signature(self):
    method test_dumps_module_str (line 261) | def test_dumps_module_str(self):
    method test_loads_module_str (line 267) | def test_loads_module_str(self):
    method test_bytes_buffer (line 273) | def test_bytes_buffer(self):
    method test_bytes_null_terminated (line 282) | def test_bytes_null_terminated(self):

FILE: test/test_append_newline.py
  class TestAppendNewline (line 9) | class TestAppendNewline:
    method test_dumps_newline (line 10) | def test_dumps_newline(self):
    method test_twitter_newline (line 17) | def test_twitter_newline(self):
    method test_canada (line 25) | def test_canada(self):
    method test_citm_catalog_newline (line 33) | def test_citm_catalog_newline(self):
    method test_github_newline (line 41) | def test_github_newline(self):

FILE: test/test_buffer.py
  function test_memory_loads (line 17) | def test_memory_loads():

FILE: test/test_canonical.py
  class TestCanonicalTests (line 7) | class TestCanonicalTests:
    method test_dumps_ctrl_escape (line 8) | def test_dumps_ctrl_escape(self):
    method test_dumps_escape_quote_backslash (line 14) | def test_dumps_escape_quote_backslash(self):
    method test_dumps_escape_line_separator (line 20) | def test_dumps_escape_line_separator(self):

FILE: test/test_circular.py
  class TestCircular (line 9) | class TestCircular:
    method test_circular_dict (line 10) | def test_circular_dict(self):
    method test_circular_dict_sort_keys (line 19) | def test_circular_dict_sort_keys(self):
    method test_circular_dict_non_str_keys (line 28) | def test_circular_dict_non_str_keys(self):
    method test_circular_list (line 37) | def test_circular_list(self):
    method test_circular_nested (line 46) | def test_circular_nested(self):
    method test_circular_nested_sort_keys (line 55) | def test_circular_nested_sort_keys(self):
    method test_circular_nested_non_str_keys (line 64) | def test_circular_nested_non_str_keys(self):

FILE: test/test_dataclass.py
  class AnEnum (line 15) | class AnEnum(Enum):
  class EmptyDataclass (line 21) | class EmptyDataclass:
  class EmptyDataclassSlots (line 26) | class EmptyDataclassSlots:
  class Dataclass1 (line 31) | class Dataclass1:
  class Dataclass2 (line 38) | class Dataclass2:
  class Dataclass3 (line 43) | class Dataclass3:
  class Dataclass4 (line 54) | class Dataclass4:
  class Datasubclass (line 61) | class Datasubclass(Dataclass1):
  class Slotsdataclass (line 66) | class Slotsdataclass:
  class Defaultdataclass (line 76) | class Defaultdataclass:
  class UnsortedDataclass (line 82) | class UnsortedDataclass:
  class InitDataclass (line 90) | class InitDataclass:
    method __post_init__ (line 96) | def __post_init__(self, a: str, b: str):
  class AbstractBase (line 101) | class AbstractBase(abc.ABC):
    method key (line 103) | def key(self):
  class ConcreteAbc (line 108) | class ConcreteAbc(AbstractBase):
    method key (line 113) | def key(self):
  class TestDataclass (line 117) | class TestDataclass:
    method test_dataclass (line 118) | def test_dataclass(self):
    method test_dataclass_recursive (line 125) | def test_dataclass_recursive(self):
    method test_dataclass_circular (line 135) | def test_dataclass_circular(self):
    method test_dataclass_empty (line 145) | def test_dataclass_empty(self):
    method test_dataclass_empty_slots (line 151) | def test_dataclass_empty_slots(self):
    method test_dataclass_default_arg (line 157) | def test_dataclass_default_arg(self):
    method test_dataclass_types (line 164) | def test_dataclass_types(self):
    method test_dataclass_metadata (line 174) | def test_dataclass_metadata(self):
    method test_dataclass_classvar (line 181) | def test_dataclass_classvar(self):
    method test_dataclass_subclass (line 188) | def test_dataclass_subclass(self):
    method test_dataclass_slots (line 198) | def test_dataclass_slots(self):
    method test_dataclass_default (line 206) | def test_dataclass_default(self):
    method test_dataclass_sort (line 226) | def test_dataclass_sort(self):
    method test_dataclass_sort_sub (line 236) | def test_dataclass_sort_sub(self):
    method test_dataclass_under (line 246) | def test_dataclass_under(self):
    method test_dataclass_option (line 253) | def test_dataclass_option(self):
  class TestDataclassPassthrough (line 264) | class TestDataclassPassthrough:
    method test_dataclass_passthrough_raise (line 265) | def test_dataclass_passthrough_raise(self):
    method test_dataclass_passthrough_default (line 278) | def test_dataclass_passthrough_default(self):
  class TestAbstractDataclass (line 299) | class TestAbstractDataclass:
    method test_dataclass_abc (line 300) | def test_dataclass_abc(self):

FILE: test/test_datetime.py
  class TestDatetime (line 44) | class TestDatetime:
    method test_datetime_naive (line 45) | def test_datetime_naive(self):
    method test_datetime_naive_utc (line 54) | def test_datetime_naive_utc(self):
    method test_datetime_min (line 66) | def test_datetime_min(self):
    method test_datetime_max (line 78) | def test_datetime_max(self):
    method test_datetime_three_digits (line 90) | def test_datetime_three_digits(self):
    method test_datetime_two_digits (line 102) | def test_datetime_two_digits(self):
    method test_datetime_tz_assume (line 115) | def test_datetime_tz_assume(self):
    method test_datetime_timezone_utc (line 138) | def test_datetime_timezone_utc(self):
    method test_datetime_pytz_utc (line 161) | def test_datetime_pytz_utc(self):
    method test_datetime_zoneinfo_utc (line 171) | def test_datetime_zoneinfo_utc(self):
    method test_datetime_zoneinfo_positive (line 194) | def test_datetime_zoneinfo_positive(self):
    method test_datetime_zoneinfo_negative (line 214) | def test_datetime_zoneinfo_negative(self):
    method test_datetime_pendulum_utc (line 234) | def test_datetime_pendulum_utc(self):
    method test_datetime_arrow_positive (line 246) | def test_datetime_arrow_positive(self):
    method test_datetime_pytz_positive (line 269) | def test_datetime_pytz_positive(self):
    method test_datetime_pendulum_positive (line 292) | def test_datetime_pendulum_positive(self):
    method test_datetime_pytz_negative_dst (line 315) | def test_datetime_pytz_negative_dst(self):
    method test_datetime_pendulum_negative_dst (line 338) | def test_datetime_pendulum_negative_dst(self):
    method test_datetime_zoneinfo_negative_non_dst (line 361) | def test_datetime_zoneinfo_negative_non_dst(self):
    method test_datetime_pytz_negative_non_dst (line 384) | def test_datetime_pytz_negative_non_dst(self):
    method test_datetime_pendulum_negative_non_dst (line 407) | def test_datetime_pendulum_negative_non_dst(self):
    method test_datetime_zoneinfo_partial_hour (line 430) | def test_datetime_zoneinfo_partial_hour(self):
    method test_datetime_pytz_partial_hour (line 453) | def test_datetime_pytz_partial_hour(self):
    method test_datetime_pendulum_partial_hour (line 476) | def test_datetime_pendulum_partial_hour(self):
    method test_datetime_partial_second_pendulum_supported (line 499) | def test_datetime_partial_second_pendulum_supported(self):
    method test_datetime_partial_second_zoneinfo (line 524) | def test_datetime_partial_second_zoneinfo(self):
    method test_datetime_partial_second_pytz (line 549) | def test_datetime_partial_second_pytz(self):
    method test_datetime_partial_second_dateutil (line 574) | def test_datetime_partial_second_dateutil(self):
    method test_datetime_microsecond_max (line 598) | def test_datetime_microsecond_max(self):
    method test_datetime_microsecond_min (line 607) | def test_datetime_microsecond_min(self):
    method test_datetime_omit_microseconds (line 616) | def test_datetime_omit_microseconds(self):
    method test_datetime_omit_microseconds_naive (line 628) | def test_datetime_omit_microseconds_naive(self):
    method test_time_omit_microseconds (line 640) | def test_time_omit_microseconds(self):
    method test_datetime_utc_z_naive_omit (line 652) | def test_datetime_utc_z_naive_omit(self):
    method test_datetime_utc_z_naive (line 666) | def test_datetime_utc_z_naive(self):
    method test_datetime_utc_z_without_tz (line 678) | def test_datetime_utc_z_without_tz(self):
    method test_datetime_utc_z_with_tz (line 691) | def test_datetime_utc_z_with_tz(self):
    method test_datetime_roundtrip (line 733) | def test_datetime_roundtrip(self):
  class TestDate (line 744) | class TestDate:
    method test_date (line 745) | def test_date(self):
    method test_date_min (line 751) | def test_date_min(self):
    method test_date_max (line 759) | def test_date_max(self):
    method test_date_three_digits (line 767) | def test_date_three_digits(self):
    method test_date_two_digits (line 778) | def test_date_two_digits(self):
  class TestTime (line 790) | class TestTime:
    method test_time (line 791) | def test_time(self):
    method test_time_tz (line 799) | def test_time_tz(self):
    method test_time_microsecond_max (line 816) | def test_time_microsecond_max(self):
    method test_time_microsecond_min (line 822) | def test_time_microsecond_min(self):
  class TestDateclassPassthrough (line 829) | class TestDateclassPassthrough:
    method test_passthrough_datetime (line 830) | def test_passthrough_datetime(self):
    method test_passthrough_date (line 837) | def test_passthrough_date(self):
    method test_passthrough_time (line 844) | def test_passthrough_time(self):
    method test_passthrough_datetime_default (line 851) | def test_passthrough_datetime_default(self):

FILE: test/test_default.py
  class Custom (line 15) | class Custom:
    method __init__ (line 16) | def __init__(self):
    method __str__ (line 19) | def __str__(self):
  class Recursive (line 23) | class Recursive:
    method __init__ (line 24) | def __init__(self, cur):
  function default_recursive (line 28) | def default_recursive(obj):
  function default_raises (line 35) | def default_raises(obj):
  class TestType (line 39) | class TestType:
    method test_default_not_callable (line 40) | def test_default_not_callable(self):
    method test_default_func (line 56) | def test_default_func(self):
    method test_default_func_none (line 67) | def test_default_func_none(self):
    method test_default_func_empty (line 73) | def test_default_func_empty(self):
    method test_default_func_exc (line 86) | def test_default_func_exc(self):
    method test_default_exception_type (line 106) | def test_default_exception_type(self):
    method test_default_vectorcall_str (line 115) | def test_default_vectorcall_str(self):
    method test_default_vectorcall_list (line 130) | def test_default_vectorcall_list(self):
    method test_default_func_nested_str (line 138) | def test_default_func_nested_str(self):
    method test_default_func_list (line 151) | def test_default_func_list(self):
    method test_default_func_nested_list (line 165) | def test_default_func_nested_list(self):
    method test_default_func_bytes (line 178) | def test_default_func_bytes(self):
    method test_default_func_invalid_str (line 199) | def test_default_func_invalid_str(self):
    method test_default_lambda_ok (line 211) | def test_default_lambda_ok(self):
    method test_default_callable_ok (line 220) | def test_default_callable_ok(self):
    method test_default_recursion (line 239) | def test_default_recursion(self):
    method test_default_recursion_reset (line 245) | def test_default_recursion_reset(self):
    method test_default_recursion_infinite (line 257) | def test_default_recursion_infinite(self):
    method test_reference_cleanup_default_custom_pass (line 273) | def test_reference_cleanup_default_custom_pass(self):
    method test_reference_cleanup_default_custom_error (line 287) | def test_reference_cleanup_default_custom_error(self):
    method test_reference_cleanup_default_subclass (line 303) | def test_reference_cleanup_default_subclass(self):
    method test_reference_cleanup_default_subclass_lambda (line 317) | def test_reference_cleanup_default_subclass_lambda(self):
    method test_default_numpy (line 331) | def test_default_numpy(self):
    method test_default_set (line 343) | def test_default_set(self):

FILE: test/test_dict.py
  class TestDict (line 9) | class TestDict:
    method test_dict (line 10) | def test_dict(self):
    method test_dict_duplicate_loads (line 19) | def test_dict_duplicate_loads(self):
    method test_dict_empty (line 22) | def test_dict_empty(self):
    method test_dict_large_dict (line 26) | def test_dict_large_dict(self):
    method test_dict_large_4096 (line 34) | def test_dict_large_4096(self):
    method test_dict_large_65536 (line 42) | def test_dict_large_65536(self):
    method test_dict_large_keys (line 50) | def test_dict_large_keys(self):
    method test_dict_unicode (line 61) | def test_dict_unicode(self):
    method test_dict_invalid_key_dumps (line 71) | def test_dict_invalid_key_dumps(self):
    method test_dict_invalid_key_loads (line 80) | def test_dict_invalid_key_loads(self):
    method test_dict_similar_keys (line 89) | def test_dict_similar_keys(self):
    method test_dict_pop_replace_first (line 100) | def test_dict_pop_replace_first(self):
    method test_dict_pop_replace_last (line 108) | def test_dict_pop_replace_last(self):
    method test_dict_pop (line 116) | def test_dict_pop(self):
    method test_in_place (line 124) | def test_in_place(self):
    method test_dict_0xff (line 130) | def test_dict_0xff(self):
    method test_dict_0xff_repeated (line 138) | def test_dict_0xff_repeated(self):
    method test_dict_0xffff (line 147) | def test_dict_0xffff(self):
    method test_dict_0xffff_repeated (line 155) | def test_dict_0xffff_repeated(self):
    method test_dict_dict (line 164) | def test_dict_dict(self):

FILE: test/test_enum.py
  class StrEnum (line 12) | class StrEnum(str, enum.Enum):
  class IntEnum (line 16) | class IntEnum(int, enum.Enum):
  class IntEnumEnum (line 20) | class IntEnumEnum(enum.IntEnum):
  class IntFlagEnum (line 24) | class IntFlagEnum(enum.IntFlag):
  class FlagEnum (line 28) | class FlagEnum(enum.Flag):
  class AutoEnum (line 32) | class AutoEnum(enum.auto):
  class FloatEnum (line 36) | class FloatEnum(float, enum.Enum):
  class Custom (line 40) | class Custom:
    method __init__ (line 41) | def __init__(self, val):
  function default (line 45) | def default(obj):
  class UnspecifiedEnum (line 51) | class UnspecifiedEnum(enum.Enum):
  class TestEnum (line 60) | class TestEnum:
    method test_cannot_subclass (line 61) | def test_cannot_subclass(self):
    method test_arbitrary_enum (line 72) | def test_arbitrary_enum(self):
    method test_custom_enum (line 78) | def test_custom_enum(self):
    method test_enum_options (line 81) | def test_enum_options(self):
    method test_int_enum (line 87) | def test_int_enum(self):
    method test_intenum_enum (line 90) | def test_intenum_enum(self):
    method test_intflag_enum (line 93) | def test_intflag_enum(self):
    method test_flag_enum (line 96) | def test_flag_enum(self):
    method test_auto_enum (line 99) | def test_auto_enum(self):
    method test_float_enum (line 102) | def test_float_enum(self):
    method test_str_enum (line 105) | def test_str_enum(self):
    method test_bool_enum (line 108) | def test_bool_enum(self):
    method test_non_str_keys_enum (line 114) | def test_non_str_keys_enum(self):

FILE: test/test_error.py
  class TestJsonDecodeError (line 27) | class TestJsonDecodeError:
    method _get_error_infos (line 28) | def _get_error_infos(self, json_decode_error_exc_info):
    method _test (line 35) | def _test(self, data, expected_err_infos):
    method test_empty (line 48) | def test_empty(self):
    method test_ascii (line 55) | def test_ascii(self):
    method test_latin1 (line 61) | def test_latin1(self):
    method test_two_byte_str (line 67) | def test_two_byte_str(self):
    method test_two_byte_bytes (line 73) | def test_two_byte_bytes(self):
    method test_four_byte (line 79) | def test_four_byte(self):
    method test_tab (line 86) | def test_tab(self):
  class Custom (line 107) | class Custom:
  class CustomException (line 111) | class CustomException(Exception):
  function default_typeerror (line 115) | def default_typeerror(obj):
  function default_notimplementederror (line 119) | def default_notimplementederror(obj):
  function default_systemerror (line 123) | def default_systemerror(obj):
  function default_importerror (line 127) | def default_importerror(obj):
  function default_customerror (line 136) | def default_customerror(obj):
  class TestJsonEncodeError (line 140) | class TestJsonEncodeError:
    method test_dumps_arg (line 141) | def test_dumps_arg(self):
    method test_dumps_chain_none (line 151) | def test_dumps_chain_none(self):
    method test_dumps_chain_u64 (line 158) | def test_dumps_chain_u64(self):
    method test_dumps_chain_default_typeerror (line 164) | def test_dumps_chain_default_typeerror(self):
    method test_dumps_chain_default_systemerror (line 170) | def test_dumps_chain_default_systemerror(self):
    method test_dumps_chain_default_importerror (line 176) | def test_dumps_chain_default_importerror(self):
    method test_dumps_chain_default_customerror (line 182) | def test_dumps_chain_default_customerror(self):
    method test_dumps_normalize_exception (line 189) | def test_dumps_normalize_exception(self):

FILE: test/test_escape.py
  function test_issue565 (line 7) | def test_issue565():
  function test_0x00 (line 14) | def test_0x00():
  function test_0x01 (line 18) | def test_0x01():
  function test_0x02 (line 22) | def test_0x02():
  function test_0x03 (line 26) | def test_0x03():
  function test_0x04 (line 30) | def test_0x04():
  function test_0x05 (line 34) | def test_0x05():
  function test_0x06 (line 38) | def test_0x06():
  function test_0x07 (line 42) | def test_0x07():
  function test_0x08 (line 46) | def test_0x08():
  function test_0x09 (line 50) | def test_0x09():
  function test_0x0a (line 54) | def test_0x0a():
  function test_0x0b (line 58) | def test_0x0b():
  function test_0x0c (line 62) | def test_0x0c():
  function test_0x0d (line 66) | def test_0x0d():
  function test_0x0e (line 70) | def test_0x0e():
  function test_0x0f (line 74) | def test_0x0f():
  function test_0x10 (line 78) | def test_0x10():
  function test_0x11 (line 82) | def test_0x11():
  function test_0x12 (line 86) | def test_0x12():
  function test_0x13 (line 90) | def test_0x13():
  function test_0x14 (line 94) | def test_0x14():
  function test_0x15 (line 98) | def test_0x15():
  function test_0x16 (line 102) | def test_0x16():
  function test_0x17 (line 106) | def test_0x17():
  function test_0x18 (line 110) | def test_0x18():
  function test_0x19 (line 114) | def test_0x19():
  function test_0x1a (line 118) | def test_0x1a():
  function test_backslash (line 122) | def test_backslash():
  function test_quote (line 126) | def test_quote():

FILE: test/test_fake.py
  class TestFaker (line 32) | class TestFaker:
    method test_faker (line 34) | def test_faker(self):

FILE: test/test_fixture.py
  class TestFixture (line 12) | class TestFixture:
    method test_twitter (line 13) | def test_twitter(self):
    method test_canada (line 22) | def test_canada(self):
    method test_citm_catalog (line 30) | def test_citm_catalog(self):
    method test_github (line 38) | def test_github(self):
    method test_blns (line 46) | def test_blns(self):

FILE: test/test_fragment.py
  class TestFragment (line 16) | class TestFragment:
    method test_fragment_fragment_eq (line 17) | def test_fragment_fragment_eq(self):
    method test_fragment_fragment_not_mut (line 20) | def test_fragment_fragment_not_mut(self):
    method test_fragment_repr (line 26) | def test_fragment_repr(self):
    method test_fragment_fragment_bytes (line 29) | def test_fragment_fragment_bytes(self):
    method test_fragment_fragment_str (line 35) | def test_fragment_fragment_str(self):
    method test_fragment_fragment_str_empty (line 41) | def test_fragment_fragment_str_empty(self):
    method test_fragment_fragment_str_str (line 44) | def test_fragment_fragment_str_str(self):
    method test_fragment_fragment_str_emoji (line 47) | def test_fragment_fragment_str_emoji(self):
    method test_fragment_fragment_str_array (line 50) | def test_fragment_fragment_str_array(self):
    method test_fragment_fragment_str_invalid (line 56) | def test_fragment_fragment_str_invalid(self):
    method test_fragment_fragment_bytes_invalid (line 60) | def test_fragment_fragment_bytes_invalid(self):
    method test_fragment_fragment_none (line 63) | def test_fragment_fragment_none(self):
    method test_fragment_fragment_args_zero (line 67) | def test_fragment_fragment_args_zero(self):
    method test_fragment_fragment_args_two (line 71) | def test_fragment_fragment_args_two(self):
    method test_fragment_fragment_keywords (line 75) | def test_fragment_fragment_keywords(self):
    method test_fragment_fragment_arg_and_keywords (line 79) | def test_fragment_fragment_arg_and_keywords(self):
  class TestFragmentPandas (line 85) | class TestFragmentPandas:
    method test_fragment_pandas (line 86) | def test_fragment_pandas(self):
  class TestFragmentParsing (line 104) | class TestFragmentParsing:
    method _run_test (line 105) | def _run_test(self, filename: str):
    method test_fragment_y_array_arraysWithSpace (line 109) | def test_fragment_y_array_arraysWithSpace(self):
    method test_fragment_y_array_empty_string (line 112) | def test_fragment_y_array_empty_string(self):
    method test_fragment_y_array_empty (line 115) | def test_fragment_y_array_empty(self):
    method test_fragment_y_array_ending_with_newline (line 118) | def test_fragment_y_array_ending_with_newline(self):
    method test_fragment_y_array_false (line 121) | def test_fragment_y_array_false(self):
    method test_fragment_y_array_heterogeneou (line 124) | def test_fragment_y_array_heterogeneou(self):
    method test_fragment_y_array_null (line 127) | def test_fragment_y_array_null(self):
    method test_fragment_y_array_with_1_and_newline (line 130) | def test_fragment_y_array_with_1_and_newline(self):
    method test_fragment_y_array_with_leading_space (line 133) | def test_fragment_y_array_with_leading_space(self):
    method test_fragment_y_array_with_several_null (line 136) | def test_fragment_y_array_with_several_null(self):
    method test_fragment_y_array_with_trailing_space (line 139) | def test_fragment_y_array_with_trailing_space(self):
    method test_fragment_y_number (line 142) | def test_fragment_y_number(self):
    method test_fragment_y_number_0e_1 (line 145) | def test_fragment_y_number_0e_1(self):
    method test_fragment_y_number_0e1 (line 148) | def test_fragment_y_number_0e1(self):
    method test_fragment_y_number_after_space (line 151) | def test_fragment_y_number_after_space(self):
    method test_fragment_y_number_double_close_to_zer (line 154) | def test_fragment_y_number_double_close_to_zer(self):
    method test_fragment_y_number_int_with_exp (line 157) | def test_fragment_y_number_int_with_exp(self):
    method test_fragment_y_number_minus_zer (line 160) | def test_fragment_y_number_minus_zer(self):
    method test_fragment_y_number_negative_int (line 163) | def test_fragment_y_number_negative_int(self):
    method test_fragment_y_number_negative_one (line 166) | def test_fragment_y_number_negative_one(self):
    method test_fragment_y_number_negative_zer (line 169) | def test_fragment_y_number_negative_zer(self):
    method test_fragment_y_number_real_capital_e (line 172) | def test_fragment_y_number_real_capital_e(self):
    method test_fragment_y_number_real_capital_e_neg_exp (line 175) | def test_fragment_y_number_real_capital_e_neg_exp(self):
    method test_fragment_y_number_real_capital_e_pos_exp (line 178) | def test_fragment_y_number_real_capital_e_pos_exp(self):
    method test_fragment_y_number_real_exponent (line 181) | def test_fragment_y_number_real_exponent(self):
    method test_fragment_y_number_real_fraction_exponent (line 184) | def test_fragment_y_number_real_fraction_exponent(self):
    method test_fragment_y_number_real_neg_exp (line 187) | def test_fragment_y_number_real_neg_exp(self):
    method test_fragment_y_number_real_pos_exponent (line 190) | def test_fragment_y_number_real_pos_exponent(self):
    method test_fragment_y_number_simple_int (line 193) | def test_fragment_y_number_simple_int(self):
    method test_fragment_y_number_simple_real (line 196) | def test_fragment_y_number_simple_real(self):
    method test_fragment_y_object (line 199) | def test_fragment_y_object(self):
    method test_fragment_y_object_basic (line 202) | def test_fragment_y_object_basic(self):
    method test_fragment_y_object_duplicated_key (line 205) | def test_fragment_y_object_duplicated_key(self):
    method test_fragment_y_object_duplicated_key_and_value (line 208) | def test_fragment_y_object_duplicated_key_and_value(self):
    method test_fragment_y_object_empty (line 211) | def test_fragment_y_object_empty(self):
    method test_fragment_y_object_empty_key (line 214) | def test_fragment_y_object_empty_key(self):
    method test_fragment_y_object_escaped_null_in_key (line 217) | def test_fragment_y_object_escaped_null_in_key(self):
    method test_fragment_y_object_extreme_number (line 220) | def test_fragment_y_object_extreme_number(self):
    method test_fragment_y_object_long_string (line 223) | def test_fragment_y_object_long_string(self):
    method test_fragment_y_object_simple (line 226) | def test_fragment_y_object_simple(self):
    method test_fragment_y_object_string_unicode (line 229) | def test_fragment_y_object_string_unicode(self):
    method test_fragment_y_object_with_newline (line 232) | def test_fragment_y_object_with_newline(self):
    method test_fragment_y_string_1_2_3_bytes_UTF_8_sequence (line 235) | def test_fragment_y_string_1_2_3_bytes_UTF_8_sequence(self):
    method test_fragment_y_string_accepted_surrogate_pair (line 238) | def test_fragment_y_string_accepted_surrogate_pair(self):
    method test_fragment_y_string_accepted_surrogate_pairs (line 241) | def test_fragment_y_string_accepted_surrogate_pairs(self):
    method test_fragment_y_string_allowed_escape (line 244) | def test_fragment_y_string_allowed_escape(self):
    method test_fragment_y_string_backslash_and_u_escaped_zer (line 247) | def test_fragment_y_string_backslash_and_u_escaped_zer(self):
    method test_fragment_y_string_backslash_doublequote (line 250) | def test_fragment_y_string_backslash_doublequote(self):
    method test_fragment_y_string_comment (line 253) | def test_fragment_y_string_comment(self):
    method test_fragment_y_string_double_escape_a (line 256) | def test_fragment_y_string_double_escape_a(self):
    method test_fragment_y_string_double_escape_ (line 259) | def test_fragment_y_string_double_escape_(self):
    method test_fragment_y_string_escaped_control_character (line 262) | def test_fragment_y_string_escaped_control_character(self):
    method test_fragment_y_string_escaped_noncharacter (line 265) | def test_fragment_y_string_escaped_noncharacter(self):
    method test_fragment_y_string_in_array (line 268) | def test_fragment_y_string_in_array(self):
    method test_fragment_y_string_in_array_with_leading_space (line 271) | def test_fragment_y_string_in_array_with_leading_space(self):
    method test_fragment_y_string_last_surrogates_1_and_2 (line 274) | def test_fragment_y_string_last_surrogates_1_and_2(self):
    method test_fragment_y_string_nbsp_uescaped (line 277) | def test_fragment_y_string_nbsp_uescaped(self):
    method test_fragment_y_string_nonCharacterInUTF_8_U_10FFFF (line 280) | def test_fragment_y_string_nonCharacterInUTF_8_U_10FFFF(self):
    method test_fragment_y_string_nonCharacterInUTF_8_U_FFFF (line 283) | def test_fragment_y_string_nonCharacterInUTF_8_U_FFFF(self):
    method test_fragment_y_string_null_escape (line 286) | def test_fragment_y_string_null_escape(self):
    method test_fragment_y_string_one_byte_utf_8 (line 289) | def test_fragment_y_string_one_byte_utf_8(self):
    method test_fragment_y_string_pi (line 292) | def test_fragment_y_string_pi(self):
    method test_fragment_y_string_reservedCharacterInUTF_8_U_1BFFF (line 295) | def test_fragment_y_string_reservedCharacterInUTF_8_U_1BFFF(self):
    method test_fragment_y_string_simple_ascii (line 298) | def test_fragment_y_string_simple_ascii(self):
    method test_fragment_y_string_space (line 301) | def test_fragment_y_string_space(self):
    method test_fragment_y_string_surrogates_U_1D11E_MUSICAL_SYMBOL_G_CLEF (line 304) | def test_fragment_y_string_surrogates_U_1D11E_MUSICAL_SYMBOL_G_CLEF(se...
    method test_fragment_y_string_three_byte_utf_8 (line 307) | def test_fragment_y_string_three_byte_utf_8(self):
    method test_fragment_y_string_two_byte_utf_8 (line 310) | def test_fragment_y_string_two_byte_utf_8(self):
    method test_fragment_y_string_u_2028_line_sep (line 313) | def test_fragment_y_string_u_2028_line_sep(self):
    method test_fragment_y_string_u_2029_par_sep (line 316) | def test_fragment_y_string_u_2029_par_sep(self):
    method test_fragment_y_string_uEscape (line 319) | def test_fragment_y_string_uEscape(self):
    method test_fragment_y_string_uescaped_newline (line 322) | def test_fragment_y_string_uescaped_newline(self):
    method test_fragment_y_string_unescaped_char_delete (line 325) | def test_fragment_y_string_unescaped_char_delete(self):
    method test_fragment_y_string_unicode (line 328) | def test_fragment_y_string_unicode(self):
    method test_fragment_y_string_unicodeEscapedBackslash (line 331) | def test_fragment_y_string_unicodeEscapedBackslash(self):
    method test_fragment_y_string_unicode_2 (line 334) | def test_fragment_y_string_unicode_2(self):
    method test_fragment_y_string_unicode_U_10FFFE_nonchar (line 337) | def test_fragment_y_string_unicode_U_10FFFE_nonchar(self):
    method test_fragment_y_string_unicode_U_1FFFE_nonchar (line 340) | def test_fragment_y_string_unicode_U_1FFFE_nonchar(self):
    method test_fragment_y_string_unicode_U_200B_ZERO_WIDTH_SPACE (line 343) | def test_fragment_y_string_unicode_U_200B_ZERO_WIDTH_SPACE(self):
    method test_fragment_y_string_unicode_U_2064_invisible_plu (line 346) | def test_fragment_y_string_unicode_U_2064_invisible_plu(self):
    method test_fragment_y_string_unicode_U_FDD0_nonchar (line 349) | def test_fragment_y_string_unicode_U_FDD0_nonchar(self):
    method test_fragment_y_string_unicode_U_FFFE_nonchar (line 352) | def test_fragment_y_string_unicode_U_FFFE_nonchar(self):
    method test_fragment_y_string_unicode_escaped_double_quote (line 355) | def test_fragment_y_string_unicode_escaped_double_quote(self):
    method test_fragment_y_string_utf8 (line 358) | def test_fragment_y_string_utf8(self):
    method test_fragment_y_string_with_del_character (line 361) | def test_fragment_y_string_with_del_character(self):
    method test_fragment_y_structure_lonely_false (line 364) | def test_fragment_y_structure_lonely_false(self):
    method test_fragment_y_structure_lonely_int (line 367) | def test_fragment_y_structure_lonely_int(self):
    method test_fragment_y_structure_lonely_negative_real (line 370) | def test_fragment_y_structure_lonely_negative_real(self):
    method test_fragment_y_structure_lonely_null (line 373) | def test_fragment_y_structure_lonely_null(self):
    method test_fragment_y_structure_lonely_string (line 376) | def test_fragment_y_structure_lonely_string(self):
    method test_fragment_y_structure_lonely_true (line 379) | def test_fragment_y_structure_lonely_true(self):
    method test_fragment_y_structure_string_empty (line 382) | def test_fragment_y_structure_string_empty(self):
    method test_fragment_y_structure_trailing_newline (line 385) | def test_fragment_y_structure_trailing_newline(self):
    method test_fragment_y_structure_true_in_array (line 388) | def test_fragment_y_structure_true_in_array(self):
    method test_fragment_y_structure_whitespace_array (line 391) | def test_fragment_y_structure_whitespace_array(self):
    method test_fragment_n_array_1_true_without_comma (line 394) | def test_fragment_n_array_1_true_without_comma(self):
    method test_fragment_n_array_a_invalid_utf8 (line 397) | def test_fragment_n_array_a_invalid_utf8(self):
    method test_fragment_n_array_colon_instead_of_comma (line 400) | def test_fragment_n_array_colon_instead_of_comma(self):
    method test_fragment_n_array_comma_after_close (line 403) | def test_fragment_n_array_comma_after_close(self):
    method test_fragment_n_array_comma_and_number (line 406) | def test_fragment_n_array_comma_and_number(self):
    method test_fragment_n_array_double_comma (line 409) | def test_fragment_n_array_double_comma(self):
    method test_fragment_n_array_double_extra_comma (line 412) | def test_fragment_n_array_double_extra_comma(self):
    method test_fragment_n_array_extra_close (line 415) | def test_fragment_n_array_extra_close(self):
    method test_fragment_n_array_extra_comma (line 418) | def test_fragment_n_array_extra_comma(self):
    method test_fragment_n_array_incomplete (line 421) | def test_fragment_n_array_incomplete(self):
    method test_fragment_n_array_incomplete_invalid_value (line 424) | def test_fragment_n_array_incomplete_invalid_value(self):
    method test_fragment_n_array_inner_array_no_comma (line 427) | def test_fragment_n_array_inner_array_no_comma(self):
    method test_fragment_n_array_invalid_utf8 (line 430) | def test_fragment_n_array_invalid_utf8(self):
    method test_fragment_n_array_items_separated_by_semicol (line 433) | def test_fragment_n_array_items_separated_by_semicol(self):
    method test_fragment_n_array_just_comma (line 436) | def test_fragment_n_array_just_comma(self):
    method test_fragment_n_array_just_minu (line 439) | def test_fragment_n_array_just_minu(self):
    method test_fragment_n_array_missing_value (line 442) | def test_fragment_n_array_missing_value(self):
    method test_fragment_n_array_newlines_unclosed (line 445) | def test_fragment_n_array_newlines_unclosed(self):
    method test_fragment_n_array_number_and_comma (line 448) | def test_fragment_n_array_number_and_comma(self):
    method test_fragment_n_array_number_and_several_comma (line 451) | def test_fragment_n_array_number_and_several_comma(self):
    method test_fragment_n_array_spaces_vertical_tab_formfeed (line 454) | def test_fragment_n_array_spaces_vertical_tab_formfeed(self):
    method test_fragment_n_array_star_inside (line 457) | def test_fragment_n_array_star_inside(self):
    method test_fragment_n_array_unclosed (line 460) | def test_fragment_n_array_unclosed(self):
    method test_fragment_n_array_unclosed_trailing_comma (line 463) | def test_fragment_n_array_unclosed_trailing_comma(self):
    method test_fragment_n_array_unclosed_with_new_line (line 466) | def test_fragment_n_array_unclosed_with_new_line(self):
    method test_fragment_n_array_unclosed_with_object_inside (line 469) | def test_fragment_n_array_unclosed_with_object_inside(self):
    method test_fragment_n_incomplete_false (line 472) | def test_fragment_n_incomplete_false(self):
    method test_fragment_n_incomplete_null (line 475) | def test_fragment_n_incomplete_null(self):
    method test_fragment_n_incomplete_true (line 478) | def test_fragment_n_incomplete_true(self):
    method test_fragment_n_multidigit_number_then_00 (line 481) | def test_fragment_n_multidigit_number_then_00(self):
    method test_fragment_n_number__ (line 484) | def test_fragment_n_number__(self):
    method test_fragment_n_number_1 (line 487) | def test_fragment_n_number_1(self):
    method test_fragment_n_number_Inf (line 490) | def test_fragment_n_number_Inf(self):
    method test_fragment_n_number_01 (line 493) | def test_fragment_n_number_01(self):
    method test_fragment_n_number_1_0 (line 496) | def test_fragment_n_number_1_0(self):
    method test_fragment_n_number_2 (line 499) | def test_fragment_n_number_2(self):
    method test_fragment_n_number_negative_NaN (line 502) | def test_fragment_n_number_negative_NaN(self):
    method test_fragment_n_number_negative_1 (line 505) | def test_fragment_n_number_negative_1(self):
    method test_fragment_n_number_2e_3 (line 508) | def test_fragment_n_number_2e_3(self):
    method test_fragment_n_number_0_1_2 (line 511) | def test_fragment_n_number_0_1_2(self):
    method test_fragment_n_number_0_3e_ (line 514) | def test_fragment_n_number_0_3e_(self):
    method test_fragment_n_number_0_3e (line 517) | def test_fragment_n_number_0_3e(self):
    method test_fragment_n_number_0_e1 (line 520) | def test_fragment_n_number_0_e1(self):
    method test_fragment_n_number_0_capital_E_ (line 523) | def test_fragment_n_number_0_capital_E_(self):
    method test_fragment_n_number_0_capital_E (line 526) | def test_fragment_n_number_0_capital_E(self):
    method test_fragment_n_number_0e_ (line 529) | def test_fragment_n_number_0e_(self):
    method test_fragment_n_number_0e (line 532) | def test_fragment_n_number_0e(self):
    method test_fragment_n_number_1_0e_ (line 535) | def test_fragment_n_number_1_0e_(self):
    method test_fragment_n_number_1_0e_2 (line 538) | def test_fragment_n_number_1_0e_2(self):
    method test_fragment_n_number_1_0e (line 541) | def test_fragment_n_number_1_0e(self):
    method test_fragment_n_number_1_000 (line 544) | def test_fragment_n_number_1_000(self):
    method test_fragment_n_number_1eE2 (line 547) | def test_fragment_n_number_1eE2(self):
    method test_fragment_n_number_2_e_3 (line 550) | def test_fragment_n_number_2_e_3(self):
    method test_fragment_n_number_2_e_3_2 (line 553) | def test_fragment_n_number_2_e_3_2(self):
    method test_fragment_n_number_2_e3_3 (line 556) | def test_fragment_n_number_2_e3_3(self):
    method test_fragment_n_number_9_e_ (line 559) | def test_fragment_n_number_9_e_(self):
    method test_fragment_n_number_negative_Inf (line 562) | def test_fragment_n_number_negative_Inf(self):
    method test_fragment_n_number_NaN (line 565) | def test_fragment_n_number_NaN(self):
    method test_fragment_n_number_U_FF11_fullwidth_digit_one (line 568) | def test_fragment_n_number_U_FF11_fullwidth_digit_one(self):
    method test_fragment_n_number_expressi (line 571) | def test_fragment_n_number_expressi(self):
    method test_fragment_n_number_hex_1_digit (line 574) | def test_fragment_n_number_hex_1_digit(self):
    method test_fragment_n_number_hex_2_digit (line 577) | def test_fragment_n_number_hex_2_digit(self):
    method test_fragment_n_number_infinity (line 580) | def test_fragment_n_number_infinity(self):
    method test_fragment_n_number_invalid_ (line 583) | def test_fragment_n_number_invalid_(self):
    method test_fragment_n_number_invalid_negative_real (line 586) | def test_fragment_n_number_invalid_negative_real(self):
    method test_fragment_n_number_invalid_utf_8_in_bigger_int (line 589) | def test_fragment_n_number_invalid_utf_8_in_bigger_int(self):
    method test_fragment_n_number_invalid_utf_8_in_exponent (line 592) | def test_fragment_n_number_invalid_utf_8_in_exponent(self):
    method test_fragment_n_number_invalid_utf_8_in_int (line 595) | def test_fragment_n_number_invalid_utf_8_in_int(self):
    method test_fragment_n_number_minus_infinity (line 598) | def test_fragment_n_number_minus_infinity(self):
    method test_fragment_n_number_minus_sign_with_trailing_garbage (line 601) | def test_fragment_n_number_minus_sign_with_trailing_garbage(self):
    method test_fragment_n_number_minus_space_1 (line 604) | def test_fragment_n_number_minus_space_1(self):
    method test_fragment_n_number_neg_int_starting_with_zer (line 607) | def test_fragment_n_number_neg_int_starting_with_zer(self):
    method test_fragment_n_number_neg_real_without_int_part (line 610) | def test_fragment_n_number_neg_real_without_int_part(self):
    method test_fragment_n_number_neg_with_garbage_at_end (line 613) | def test_fragment_n_number_neg_with_garbage_at_end(self):
    method test_fragment_n_number_real_garbage_after_e (line 616) | def test_fragment_n_number_real_garbage_after_e(self):
    method test_fragment_n_number_real_with_invalid_utf8_after_e (line 619) | def test_fragment_n_number_real_with_invalid_utf8_after_e(self):
    method test_fragment_n_number_real_without_fractional_part (line 622) | def test_fragment_n_number_real_without_fractional_part(self):
    method test_fragment_n_number_starting_with_dot (line 625) | def test_fragment_n_number_starting_with_dot(self):
    method test_fragment_n_number_with_alpha (line 628) | def test_fragment_n_number_with_alpha(self):
    method test_fragment_n_number_with_alpha_char (line 631) | def test_fragment_n_number_with_alpha_char(self):
    method test_fragment_n_number_with_leading_zer (line 634) | def test_fragment_n_number_with_leading_zer(self):
    method test_fragment_n_object_bad_value (line 637) | def test_fragment_n_object_bad_value(self):
    method test_fragment_n_object_bracket_key (line 640) | def test_fragment_n_object_bracket_key(self):
    method test_fragment_n_object_comma_instead_of_col (line 643) | def test_fragment_n_object_comma_instead_of_col(self):
    method test_fragment_n_object_double_col (line 646) | def test_fragment_n_object_double_col(self):
    method test_fragment_n_object_emoji (line 649) | def test_fragment_n_object_emoji(self):
    method test_fragment_n_object_garbage_at_end (line 652) | def test_fragment_n_object_garbage_at_end(self):
    method test_fragment_n_object_key_with_single_quote (line 655) | def test_fragment_n_object_key_with_single_quote(self):
    method test_fragment_n_object_lone_continuation_byte_in_key_and_trailing_comma (line 658) | def test_fragment_n_object_lone_continuation_byte_in_key_and_trailing_...
    method test_fragment_n_object_missing_col (line 661) | def test_fragment_n_object_missing_col(self):
    method test_fragment_n_object_missing_key (line 664) | def test_fragment_n_object_missing_key(self):
    method test_fragment_n_object_missing_semicol (line 667) | def test_fragment_n_object_missing_semicol(self):
    method test_fragment_n_object_missing_value (line 670) | def test_fragment_n_object_missing_value(self):
    method test_fragment_n_object_no_col (line 673) | def test_fragment_n_object_no_col(self):
    method test_fragment_n_object_non_string_key (line 676) | def test_fragment_n_object_non_string_key(self):
    method test_fragment_n_object_non_string_key_but_huge_number_instead (line 679) | def test_fragment_n_object_non_string_key_but_huge_number_instead(self):
    method test_fragment_n_object_repeated_null_null (line 682) | def test_fragment_n_object_repeated_null_null(self):
    method test_fragment_n_object_several_trailing_comma (line 685) | def test_fragment_n_object_several_trailing_comma(self):
    method test_fragment_n_object_single_quote (line 688) | def test_fragment_n_object_single_quote(self):
    method test_fragment_n_object_trailing_comma (line 691) | def test_fragment_n_object_trailing_comma(self):
    method test_fragment_n_object_trailing_comment (line 694) | def test_fragment_n_object_trailing_comment(self):
    method test_fragment_n_object_trailing_comment_ope (line 697) | def test_fragment_n_object_trailing_comment_ope(self):
    method test_fragment_n_object_trailing_comment_slash_ope (line 700) | def test_fragment_n_object_trailing_comment_slash_ope(self):
    method test_fragment_n_object_trailing_comment_slash_open_incomplete (line 703) | def test_fragment_n_object_trailing_comment_slash_open_incomplete(self):
    method test_fragment_n_object_two_commas_in_a_row (line 706) | def test_fragment_n_object_two_commas_in_a_row(self):
    method test_fragment_n_object_unquoted_key (line 709) | def test_fragment_n_object_unquoted_key(self):
    method test_fragment_n_object_unterminated_value (line 712) | def test_fragment_n_object_unterminated_value(self):
    method test_fragment_n_object_with_single_string (line 715) | def test_fragment_n_object_with_single_string(self):
    method test_fragment_n_object_with_trailing_garbage (line 718) | def test_fragment_n_object_with_trailing_garbage(self):
    method test_fragment_n_single_space (line 721) | def test_fragment_n_single_space(self):
    method test_fragment_n_string_1_surrogate_then_escape (line 724) | def test_fragment_n_string_1_surrogate_then_escape(self):
    method test_fragment_n_string_1_surrogate_then_escape_u (line 727) | def test_fragment_n_string_1_surrogate_then_escape_u(self):
    method test_fragment_n_string_1_surrogate_then_escape_u1 (line 730) | def test_fragment_n_string_1_surrogate_then_escape_u1(self):
    method test_fragment_n_string_1_surrogate_then_escape_u1x (line 733) | def test_fragment_n_string_1_surrogate_then_escape_u1x(self):
    method test_fragment_n_string_accentuated_char_no_quote (line 736) | def test_fragment_n_string_accentuated_char_no_quote(self):
    method test_fragment_n_string_backslash_00 (line 739) | def test_fragment_n_string_backslash_00(self):
    method test_fragment_n_string_escape_x (line 742) | def test_fragment_n_string_escape_x(self):
    method test_fragment_n_string_escaped_backslash_bad (line 745) | def test_fragment_n_string_escaped_backslash_bad(self):
    method test_fragment_n_string_escaped_ctrl_char_tab (line 748) | def test_fragment_n_string_escaped_ctrl_char_tab(self):
    method test_fragment_n_string_escaped_emoji (line 751) | def test_fragment_n_string_escaped_emoji(self):
    method test_fragment_n_string_incomplete_escape (line 754) | def test_fragment_n_string_incomplete_escape(self):
    method test_fragment_n_string_incomplete_escaped_character (line 757) | def test_fragment_n_string_incomplete_escaped_character(self):
    method test_fragment_n_string_incomplete_surrogate (line 760) | def test_fragment_n_string_incomplete_surrogate(self):
    method test_fragment_n_string_incomplete_surrogate_escape_invalid (line 763) | def test_fragment_n_string_incomplete_surrogate_escape_invalid(self):
    method test_fragment_n_string_invalid_utf_8_in_escape (line 766) | def test_fragment_n_string_invalid_utf_8_in_escape(self):
    method test_fragment_n_string_invalid_backslash_esc (line 769) | def test_fragment_n_string_invalid_backslash_esc(self):
    method test_fragment_n_string_invalid_unicode_escape (line 772) | def test_fragment_n_string_invalid_unicode_escape(self):
    method test_fragment_n_string_invalid_utf8_after_escape (line 775) | def test_fragment_n_string_invalid_utf8_after_escape(self):
    method test_fragment_n_string_leading_uescaped_thinspace (line 778) | def test_fragment_n_string_leading_uescaped_thinspace(self):
    method test_fragment_n_string_no_quotes_with_bad_escape (line 781) | def test_fragment_n_string_no_quotes_with_bad_escape(self):
    method test_fragment_n_string_single_doublequote (line 784) | def test_fragment_n_string_single_doublequote(self):
    method test_fragment_n_string_single_quote (line 787) | def test_fragment_n_string_single_quote(self):
    method test_fragment_n_string_single_string_no_double_quote (line 790) | def test_fragment_n_string_single_string_no_double_quote(self):
    method test_fragment_n_string_start_escape_unclosed (line 793) | def test_fragment_n_string_start_escape_unclosed(self):
    method test_fragment_n_string_unescaped_crtl_char (line 796) | def test_fragment_n_string_unescaped_crtl_char(self):
    method test_fragment_n_string_unescaped_newline (line 799) | def test_fragment_n_string_unescaped_newline(self):
    method test_fragment_n_string_unescaped_tab (line 802) | def test_fragment_n_string_unescaped_tab(self):
    method test_fragment_n_string_unicode_CapitalU (line 805) | def test_fragment_n_string_unicode_CapitalU(self):
    method test_fragment_n_string_with_trailing_garbage (line 808) | def test_fragment_n_string_with_trailing_garbage(self):
    method test_fragment_n_structure_100000_opening_array (line 811) | def test_fragment_n_structure_100000_opening_array(self):
    method test_fragment_n_structure_U_2060_word_joined (line 814) | def test_fragment_n_structure_U_2060_word_joined(self):
    method test_fragment_n_structure_UTF8_BOM_no_data (line 817) | def test_fragment_n_structure_UTF8_BOM_no_data(self):
    method test_fragment_n_structure_angle_bracket_ (line 820) | def test_fragment_n_structure_angle_bracket_(self):
    method test_fragment_n_structure_angle_bracket_null (line 823) | def test_fragment_n_structure_angle_bracket_null(self):
    method test_fragment_n_structure_array_trailing_garbage (line 826) | def test_fragment_n_structure_array_trailing_garbage(self):
    method test_fragment_n_structure_array_with_extra_array_close (line 829) | def test_fragment_n_structure_array_with_extra_array_close(self):
    method test_fragment_n_structure_array_with_unclosed_string (line 832) | def test_fragment_n_structure_array_with_unclosed_string(self):
    method test_fragment_n_structure_ascii_unicode_identifier (line 835) | def test_fragment_n_structure_ascii_unicode_identifier(self):
    method test_fragment_n_structure_capitalized_True (line 838) | def test_fragment_n_structure_capitalized_True(self):
    method test_fragment_n_structure_close_unopened_array (line 841) | def test_fragment_n_structure_close_unopened_array(self):
    method test_fragment_n_structure_comma_instead_of_closing_brace (line 844) | def test_fragment_n_structure_comma_instead_of_closing_brace(self):
    method test_fragment_n_structure_double_array (line 847) | def test_fragment_n_structure_double_array(self):
    method test_fragment_n_structure_end_array (line 850) | def test_fragment_n_structure_end_array(self):
    method test_fragment_n_structure_incomplete_UTF8_BOM (line 853) | def test_fragment_n_structure_incomplete_UTF8_BOM(self):
    method test_fragment_n_structure_lone_invalid_utf_8 (line 856) | def test_fragment_n_structure_lone_invalid_utf_8(self):
    method test_fragment_n_structure_lone_open_bracket (line 859) | def test_fragment_n_structure_lone_open_bracket(self):
    method test_fragment_n_structure_no_data (line 862) | def test_fragment_n_structure_no_data(self):
    method test_fragment_n_structure_null_byte_outside_string (line 865) | def test_fragment_n_structure_null_byte_outside_string(self):
    method test_fragment_n_structure_number_with_trailing_garbage (line 868) | def test_fragment_n_structure_number_with_trailing_garbage(self):
    method test_fragment_n_structure_object_followed_by_closing_object (line 871) | def test_fragment_n_structure_object_followed_by_closing_object(self):
    method test_fragment_n_structure_object_unclosed_no_value (line 874) | def test_fragment_n_structure_object_unclosed_no_value(self):
    method test_fragment_n_structure_object_with_comment (line 877) | def test_fragment_n_structure_object_with_comment(self):
    method test_fragment_n_structure_object_with_trailing_garbage (line 880) | def test_fragment_n_structure_object_with_trailing_garbage(self):
    method test_fragment_n_structure_open_array_apostrophe (line 883) | def test_fragment_n_structure_open_array_apostrophe(self):
    method test_fragment_n_structure_open_array_comma (line 886) | def test_fragment_n_structure_open_array_comma(self):
    method test_fragment_n_structure_open_array_object (line 889) | def test_fragment_n_structure_open_array_object(self):
    method test_fragment_n_structure_open_array_open_object (line 892) | def test_fragment_n_structure_open_array_open_object(self):
    method test_fragment_n_structure_open_array_open_string (line 895) | def test_fragment_n_structure_open_array_open_string(self):
    method test_fragment_n_structure_open_array_string (line 898) | def test_fragment_n_structure_open_array_string(self):
    method test_fragment_n_structure_open_object (line 901) | def test_fragment_n_structure_open_object(self):
    method test_fragment_n_structure_open_object_close_array (line 904) | def test_fragment_n_structure_open_object_close_array(self):
    method test_fragment_n_structure_open_object_comma (line 907) | def test_fragment_n_structure_open_object_comma(self):
    method test_fragment_n_structure_open_object_open_array (line 910) | def test_fragment_n_structure_open_object_open_array(self):
    method test_fragment_n_structure_open_object_open_string (line 913) | def test_fragment_n_structure_open_object_open_string(self):
    method test_fragment_n_structure_open_object_string_with_apostrophe (line 916) | def test_fragment_n_structure_open_object_string_with_apostrophe(self):
    method test_fragment_n_structure_open_ope (line 919) | def test_fragment_n_structure_open_ope(self):
    method test_fragment_n_structure_single_eacute (line 922) | def test_fragment_n_structure_single_eacute(self):
    method test_fragment_n_structure_single_star (line 925) | def test_fragment_n_structure_single_star(self):
    method test_fragment_n_structure_trailing_ (line 928) | def test_fragment_n_structure_trailing_(self):
    method test_fragment_n_structure_uescaped_LF_before_string (line 931) | def test_fragment_n_structure_uescaped_LF_before_string(self):
    method test_fragment_n_structure_unclosed_array (line 934) | def test_fragment_n_structure_unclosed_array(self):
    method test_fragment_n_structure_unclosed_array_partial_null (line 937) | def test_fragment_n_structure_unclosed_array_partial_null(self):
    method test_fragment_n_structure_unclosed_array_unfinished_false (line 940) | def test_fragment_n_structure_unclosed_array_unfinished_false(self):
    method test_fragment_n_structure_unclosed_array_unfinished_true (line 943) | def test_fragment_n_structure_unclosed_array_unfinished_true(self):
    method test_fragment_n_structure_unclosed_object (line 946) | def test_fragment_n_structure_unclosed_object(self):
    method test_fragment_n_structure_unicode_identifier (line 949) | def test_fragment_n_structure_unicode_identifier(self):
    method test_fragment_n_structure_whitespace_U_2060_word_joiner (line 952) | def test_fragment_n_structure_whitespace_U_2060_word_joiner(self):
    method test_fragment_n_structure_whitespace_formfeed (line 955) | def test_fragment_n_structure_whitespace_formfeed(self):
    method test_fragment_i_number_double_huge_neg_exp (line 958) | def test_fragment_i_number_double_huge_neg_exp(self):
    method test_fragment_i_number_huge_exp (line 961) | def test_fragment_i_number_huge_exp(self):
    method test_fragment_i_number_neg_int_huge_exp (line 964) | def test_fragment_i_number_neg_int_huge_exp(self):
    method test_fragment_i_number_pos_double_huge_exp (line 967) | def test_fragment_i_number_pos_double_huge_exp(self):
    method test_fragment_i_number_real_neg_overflow (line 970) | def test_fragment_i_number_real_neg_overflow(self):
    method test_fragment_i_number_real_pos_overflow (line 973) | def test_fragment_i_number_real_pos_overflow(self):
    method test_fragment_i_number_real_underflow (line 976) | def test_fragment_i_number_real_underflow(self):
    method test_fragment_i_number_too_big_neg_int (line 979) | def test_fragment_i_number_too_big_neg_int(self):
    method test_fragment_i_number_too_big_pos_int (line 982) | def test_fragment_i_number_too_big_pos_int(self):
    method test_fragment_i_number_very_big_negative_int (line 985) | def test_fragment_i_number_very_big_negative_int(self):
    method test_fragment_i_object_key_lone_2nd_surrogate (line 988) | def test_fragment_i_object_key_lone_2nd_surrogate(self):
    method test_fragment_i_string_1st_surrogate_but_2nd_missing (line 991) | def test_fragment_i_string_1st_surrogate_but_2nd_missing(self):
    method test_fragment_i_string_1st_valid_surrogate_2nd_invalid (line 994) | def test_fragment_i_string_1st_valid_surrogate_2nd_invalid(self):
    method test_fragment_i_string_UTF_16LE_with_BOM (line 997) | def test_fragment_i_string_UTF_16LE_with_BOM(self):
    method test_fragment_i_string_UTF_8_invalid_sequence (line 1000) | def test_fragment_i_string_UTF_8_invalid_sequence(self):
    method test_fragment_i_string_UTF8_surrogate_U_D800 (line 1003) | def test_fragment_i_string_UTF8_surrogate_U_D800(self):
    method test_fragment_i_string_incomplete_surrogate_and_escape_valid (line 1006) | def test_fragment_i_string_incomplete_surrogate_and_escape_valid(self):
    method test_fragment_i_string_incomplete_surrogate_pair (line 1009) | def test_fragment_i_string_incomplete_surrogate_pair(self):
    method test_fragment_i_string_incomplete_surrogates_escape_valid (line 1012) | def test_fragment_i_string_incomplete_surrogates_escape_valid(self):
    method test_fragment_i_string_invalid_lonely_surrogate (line 1015) | def test_fragment_i_string_invalid_lonely_surrogate(self):
    method test_fragment_i_string_invalid_surrogate (line 1018) | def test_fragment_i_string_invalid_surrogate(self):
    method test_fragment_i_string_invalid_utf_8 (line 1021) | def test_fragment_i_string_invalid_utf_8(self):
    method test_fragment_i_string_inverted_surrogates_U_1D11E (line 1024) | def test_fragment_i_string_inverted_surrogates_U_1D11E(self):
    method test_fragment_i_string_iso_latin_1 (line 1027) | def test_fragment_i_string_iso_latin_1(self):
    method test_fragment_i_string_lone_second_surrogate (line 1030) | def test_fragment_i_string_lone_second_surrogate(self):
    method test_fragment_i_string_lone_utf8_continuation_byte (line 1033) | def test_fragment_i_string_lone_utf8_continuation_byte(self):
    method test_fragment_i_string_not_in_unicode_range (line 1036) | def test_fragment_i_string_not_in_unicode_range(self):
    method test_fragment_i_string_overlong_sequence_2_byte (line 1039) | def test_fragment_i_string_overlong_sequence_2_byte(self):
    method test_fragment_i_string_overlong_sequence_6_byte (line 1042) | def test_fragment_i_string_overlong_sequence_6_byte(self):
    method test_fragment_i_string_overlong_sequence_6_bytes_null (line 1045) | def test_fragment_i_string_overlong_sequence_6_bytes_null(self):
    method test_fragment_i_string_truncated_utf_8 (line 1048) | def test_fragment_i_string_truncated_utf_8(self):
    method test_fragment_i_string_utf16BE_no_BOM (line 1051) | def test_fragment_i_string_utf16BE_no_BOM(self):
    method test_fragment_i_string_utf16LE_no_BOM (line 1054) | def test_fragment_i_string_utf16LE_no_BOM(self):
    method test_fragment_i_structure_500_nested_array (line 1057) | def test_fragment_i_structure_500_nested_array(self):
    method test_fragment_i_structure_UTF_8_BOM_empty_object (line 1060) | def test_fragment_i_structure_UTF_8_BOM_empty_object(self):

FILE: test/test_indent.py
  class TestIndentedOutput (line 13) | class TestIndentedOutput:
    method test_equivalent (line 14) | def test_equivalent(self):
    method test_sort (line 24) | def test_sort(self):
    method test_non_str (line 31) | def test_non_str(self):
    method test_options (line 38) | def test_options(self):
    method test_empty (line 55) | def test_empty(self):
    method test_list_max (line 60) | def test_list_max(self):
    method test_dict_max (line 71) | def test_dict_max(self):
    method test_twitter_pretty (line 84) | def test_twitter_pretty(self):
    method test_github_pretty (line 95) | def test_github_pretty(self):
    method test_canada_pretty (line 106) | def test_canada_pretty(self):
    method test_citm_catalog_pretty (line 117) | def test_citm_catalog_pretty(self):

FILE: test/test_issue221.py
  function test_invalid (line 16) | def test_invalid(val):

FILE: test/test_issue331.py
  function test_issue331_1_pretty (line 335) | def test_issue331_1_pretty():
  function test_issue331_1_compact (line 343) | def test_issue331_1_compact():
  function test_issue331_2_pretty (line 351) | def test_issue331_2_pretty():
  function test_issue331_2_compact (line 359) | def test_issue331_2_compact():
  function test_issue335_compact (line 366) | def test_issue335_compact():
  function test_issue335_pretty (line 371) | def test_issue335_pretty():

FILE: test/test_jsonchecker.py
  class TestJsonChecker (line 15) | class TestJsonChecker:
    method _run_fail_json (line 16) | def _run_fail_json(self, filename, exc=orjson.JSONDecodeError):
    method _run_pass_json (line 20) | def _run_pass_json(self, filename, match=""):
    method test_fail01 (line 24) | def test_fail01(self):
    method test_fail02 (line 33) | def test_fail02(self):
    method test_fail03 (line 39) | def test_fail03(self):
    method test_fail04 (line 45) | def test_fail04(self):
    method test_fail05 (line 51) | def test_fail05(self):
    method test_fail06 (line 57) | def test_fail06(self):
    method test_fail07 (line 63) | def test_fail07(self):
    method test_fail08 (line 69) | def test_fail08(self):
    method test_fail09 (line 75) | def test_fail09(self):
    method test_fail10 (line 81) | def test_fail10(self):
    method test_fail11 (line 87) | def test_fail11(self):
    method test_fail12 (line 93) | def test_fail12(self):
    method test_fail13 (line 99) | def test_fail13(self):
    method test_fail14 (line 105) | def test_fail14(self):
    method test_fail15 (line 111) | def test_fail15(self):
    method test_fail16 (line 117) | def test_fail16(self):
    method test_fail17 (line 123) | def test_fail17(self):
    method test_fail18 (line 129) | def test_fail18(self):
    method test_fail19 (line 138) | def test_fail19(self):
    method test_fail20 (line 144) | def test_fail20(self):
    method test_fail21 (line 150) | def test_fail21(self):
    method test_fail22 (line 156) | def test_fail22(self):
    method test_fail23 (line 162) | def test_fail23(self):
    method test_fail24 (line 168) | def test_fail24(self):
    method test_fail25 (line 174) | def test_fail25(self):
    method test_fail26 (line 180) | def test_fail26(self):
    method test_fail27 (line 186) | def test_fail27(self):
    method test_fail28 (line 192) | def test_fail28(self):
    method test_fail29 (line 198) | def test_fail29(self):
    method test_fail30 (line 204) | def test_fail30(self):
    method test_fail31 (line 210) | def test_fail31(self):
    method test_fail32 (line 216) | def test_fail32(self):
    method test_fail33 (line 222) | def test_fail33(self):
    method test_pass01 (line 228) | def test_pass01(self):
    method test_pass02 (line 234) | def test_pass02(self):
    method test_pass03 (line 243) | def test_pass03(self):

FILE: test/test_memory.py
  function default (line 30) | def default(obj):
  class Member (line 35) | class Member:
  class Object (line 41) | class Object:
  class Unsupported (line 65) | class Unsupported:
  class TestMemory (line 69) | class TestMemory:
    method test_memory_loads (line 71) | def test_memory_loads(self):
    method test_memory_loads_memoryview (line 88) | def test_memory_loads_memoryview(self):
    method test_memory_dumps (line 105) | def test_memory_dumps(self):
    method test_memory_loads_exc (line 123) | def test_memory_loads_exc(self):
    method test_memory_dumps_exc (line 142) | def test_memory_dumps_exc(self):
    method test_memory_dumps_default (line 162) | def test_memory_dumps_default(self):
    method test_memory_dumps_dataclass (line 187) | def test_memory_dumps_dataclass(self):
    method test_memory_dumps_pytz_tzinfo (line 207) | def test_memory_dumps_pytz_tzinfo(self):
    method test_memory_loads_keys (line 225) | def test_memory_loads_keys(self):
    method test_memory_dumps_numpy (line 245) | def test_memory_dumps_numpy(self):
    method test_memory_dumps_pandas (line 264) | def test_memory_dumps_pandas(self):
    method test_memory_dumps_fragment (line 282) | def test_memory_dumps_fragment(self):

FILE: test/test_non_str_keys.py
  class SubStr (line 20) | class SubStr(str):
  class TestNonStrKeyTests (line 24) | class TestNonStrKeyTests:
    method test_dict_keys_duplicate (line 25) | def test_dict_keys_duplicate(self):
    method test_dict_keys_int (line 34) | def test_dict_keys_int(self):
    method test_dict_keys_substr (line 40) | def test_dict_keys_substr(self):
    method test_dict_keys_substr_passthrough (line 46) | def test_dict_keys_substr_passthrough(self):
    method test_dict_keys_substr_invalid (line 58) | def test_dict_keys_substr_invalid(self):
    method test_dict_keys_strict (line 62) | def test_dict_keys_strict(self):
    method test_dict_keys_int_range_valid_i64 (line 74) | def test_dict_keys_int_range_valid_i64(self):
    method test_dict_keys_int_range_valid_u64 (line 100) | def test_dict_keys_int_range_valid_u64(self):
    method test_dict_keys_int_range_invalid (line 119) | def test_dict_keys_int_range_invalid(self):
    method test_dict_keys_float (line 128) | def test_dict_keys_float(self):
    method test_dict_keys_inf (line 134) | def test_dict_keys_inf(self):
    method test_dict_keys_nan (line 144) | def test_dict_keys_nan(self):
    method test_dict_keys_bool (line 150) | def test_dict_keys_bool(self):
    method test_dict_keys_datetime (line 156) | def test_dict_keys_datetime(self):
    method test_dict_keys_datetime_opt (line 165) | def test_dict_keys_datetime_opt(self):
    method test_dict_keys_datetime_passthrough (line 177) | def test_dict_keys_datetime_passthrough(self):
    method test_dict_keys_uuid (line 189) | def test_dict_keys_uuid(self):
    method test_dict_keys_date (line 201) | def test_dict_keys_date(self):
    method test_dict_keys_time (line 210) | def test_dict_keys_time(self):
    method test_dict_non_str_and_sort_keys (line 219) | def test_dict_non_str_and_sort_keys(self):
    method test_dict_keys_time_err (line 233) | def test_dict_keys_time_err(self):
    method test_dict_keys_str (line 241) | def test_dict_keys_str(self):
    method test_dict_keys_type (line 246) | def test_dict_keys_type(self):
    method test_dict_keys_array (line 255) | def test_dict_keys_array(self):
    method test_dict_keys_dataclass (line 259) | def test_dict_keys_dataclass(self):
    method test_dict_keys_dataclass_hash (line 267) | def test_dict_keys_dataclass_hash(self):
    method test_dict_keys_list (line 279) | def test_dict_keys_list(self):
    method test_dict_keys_dict (line 283) | def test_dict_keys_dict(self):
    method test_dict_keys_tuple (line 287) | def test_dict_keys_tuple(self):
    method test_dict_keys_unknown (line 292) | def test_dict_keys_unknown(self):
    method test_dict_keys_no_str_call (line 296) | def test_dict_keys_no_str_call(self):

FILE: test/test_numpy.py
  function numpy_default (line 14) | def numpy_default(obj):
  class TestNumpy (line 21) | class TestNumpy:
    method test_numpy_array_d1_uintp (line 22) | def test_numpy_array_d1_uintp(self):
    method test_numpy_array_d1_intp (line 30) | def test_numpy_array_d1_intp(self):
    method test_numpy_array_d1_i64 (line 38) | def test_numpy_array_d1_i64(self):
    method test_numpy_array_d1_u64 (line 47) | def test_numpy_array_d1_u64(self):
    method test_numpy_array_d1_i8 (line 56) | def test_numpy_array_d1_i8(self):
    method test_numpy_array_d1_u8 (line 65) | def test_numpy_array_d1_u8(self):
    method test_numpy_array_d1_i32 (line 74) | def test_numpy_array_d1_i32(self):
    method test_numpy_array_d1_i16 (line 83) | def test_numpy_array_d1_i16(self):
    method test_numpy_array_d1_u16 (line 92) | def test_numpy_array_d1_u16(self):
    method test_numpy_array_d1_u32 (line 101) | def test_numpy_array_d1_u32(self):
    method test_numpy_array_d1_f32 (line 110) | def test_numpy_array_d1_f32(self):
    method test_numpy_array_d1_f16 (line 119) | def test_numpy_array_d1_f16(self):
    method test_numpy_array_f16_roundtrip (line 128) | def test_numpy_array_f16_roundtrip(self):
    method test_numpy_array_f16_edge (line 150) | def test_numpy_array_f16_edge(self):
    method test_numpy_array_f32_edge (line 169) | def test_numpy_array_f32_edge(self):
    method test_numpy_array_f64_edge (line 188) | def test_numpy_array_f64_edge(self):
    method test_numpy_array_d1_f64 (line 207) | def test_numpy_array_d1_f64(self):
    method test_numpy_array_d1_bool (line 216) | def test_numpy_array_d1_bool(self):
    method test_numpy_array_d1_datetime64_years (line 225) | def test_numpy_array_d1_datetime64_years(self):
    method test_numpy_array_d1_datetime64_months (line 245) | def test_numpy_array_d1_datetime64_months(self):
    method test_numpy_array_d1_datetime64_days (line 260) | def test_numpy_array_d1_datetime64_days(self):
    method test_numpy_array_d1_datetime64_hours (line 275) | def test_numpy_array_d1_datetime64_hours(self):
    method test_numpy_array_d1_datetime64_minutes (line 290) | def test_numpy_array_d1_datetime64_minutes(self):
    method test_numpy_array_d1_datetime64_seconds (line 305) | def test_numpy_array_d1_datetime64_seconds(self):
    method test_numpy_array_d1_datetime64_milliseconds (line 320) | def test_numpy_array_d1_datetime64_milliseconds(self):
    method test_numpy_array_d1_datetime64_microseconds (line 335) | def test_numpy_array_d1_datetime64_microseconds(self):
    method test_numpy_array_d1_datetime64_nanoseconds (line 350) | def test_numpy_array_d1_datetime64_nanoseconds(self):
    method test_numpy_array_d1_datetime64_picoseconds (line 365) | def test_numpy_array_d1_datetime64_picoseconds(self):
    method test_numpy_array_d2_i64 (line 381) | def test_numpy_array_d2_i64(self):
    method test_numpy_array_d2_f64 (line 390) | def test_numpy_array_d2_f64(self):
    method test_numpy_array_d3_i8 (line 399) | def test_numpy_array_d3_i8(self):
    method test_numpy_array_d3_u8 (line 408) | def test_numpy_array_d3_u8(self):
    method test_numpy_array_d3_i32 (line 417) | def test_numpy_array_d3_i32(self):
    method test_numpy_array_d3_i64 (line 426) | def test_numpy_array_d3_i64(self):
    method test_numpy_array_d3_f64 (line 435) | def test_numpy_array_d3_f64(self):
    method test_numpy_array_fortran (line 447) | def test_numpy_array_fortran(self):
    method test_numpy_array_non_contiguous_message (line 458) | def test_numpy_array_non_contiguous_message(self):
    method test_numpy_array_unsupported_dtype (line 470) | def test_numpy_array_unsupported_dtype(self):
    method test_numpy_array_d1 (line 476) | def test_numpy_array_d1(self):
    method test_numpy_array_d2 (line 488) | def test_numpy_array_d2(self):
    method test_numpy_array_d3 (line 500) | def test_numpy_array_d3(self):
    method test_numpy_array_d4 (line 512) | def test_numpy_array_d4(self):
    method test_numpy_array_4_stride (line 524) | def test_numpy_array_4_stride(self):
    method test_numpy_array_dimension_zero (line 536) | def test_numpy_array_dimension_zero(self):
    method test_numpy_array_dimension_max (line 575) | def test_numpy_array_dimension_max(self):
    method test_numpy_scalar_int8 (line 621) | def test_numpy_scalar_int8(self):
    method test_numpy_scalar_int16 (line 630) | def test_numpy_scalar_int16(self):
    method test_numpy_scalar_int32 (line 641) | def test_numpy_scalar_int32(self):
    method test_numpy_scalar_int64 (line 652) | def test_numpy_scalar_int64(self):
    method test_numpy_scalar_uint8 (line 668) | def test_numpy_scalar_uint8(self):
    method test_numpy_scalar_uint16 (line 674) | def test_numpy_scalar_uint16(self):
    method test_numpy_scalar_uint32 (line 681) | def test_numpy_scalar_uint32(self):
    method test_numpy_scalar_uint64 (line 688) | def test_numpy_scalar_uint64(self):
    method test_numpy_scalar_float16 (line 698) | def test_numpy_scalar_float16(self):
    method test_numpy_scalar_float32 (line 704) | def test_numpy_scalar_float32(self):
    method test_numpy_scalar_float64 (line 710) | def test_numpy_scalar_float64(self):
    method test_numpy_bool (line 716) | def test_numpy_bool(self):
    method test_numpy_datetime_year (line 725) | def test_numpy_datetime_year(self):
    method test_numpy_datetime_month (line 731) | def test_numpy_datetime_month(self):
    method test_numpy_datetime_day (line 737) | def test_numpy_datetime_day(self):
    method test_numpy_datetime_hour (line 746) | def test_numpy_datetime_hour(self):
    method test_numpy_datetime_minute (line 755) | def test_numpy_datetime_minute(self):
    method test_numpy_datetime_second (line 764) | def test_numpy_datetime_second(self):
    method test_numpy_datetime_milli (line 773) | def test_numpy_datetime_milli(self):
    method test_numpy_datetime_micro (line 782) | def test_numpy_datetime_micro(self):
    method test_numpy_datetime_nano (line 791) | def test_numpy_datetime_nano(self):
    method test_numpy_datetime_naive_utc_year (line 800) | def test_numpy_datetime_naive_utc_year(self):
    method test_numpy_datetime_naive_utc_month (line 809) | def test_numpy_datetime_naive_utc_month(self):
    method test_numpy_datetime_naive_utc_day (line 818) | def test_numpy_datetime_naive_utc_day(self):
    method test_numpy_datetime_naive_utc_hour (line 827) | def test_numpy_datetime_naive_utc_hour(self):
    method test_numpy_datetime_naive_utc_minute (line 836) | def test_numpy_datetime_naive_utc_minute(self):
    method test_numpy_datetime_naive_utc_second (line 845) | def test_numpy_datetime_naive_utc_second(self):
    method test_numpy_datetime_naive_utc_milli (line 854) | def test_numpy_datetime_naive_utc_milli(self):
    method test_numpy_datetime_naive_utc_micro (line 863) | def test_numpy_datetime_naive_utc_micro(self):
    method test_numpy_datetime_naive_utc_nano (line 872) | def test_numpy_datetime_naive_utc_nano(self):
    method test_numpy_datetime_naive_utc_utc_z_year (line 881) | def test_numpy_datetime_naive_utc_utc_z_year(self):
    method test_numpy_datetime_naive_utc_utc_z_month (line 892) | def test_numpy_datetime_naive_utc_utc_z_month(self):
    method test_numpy_datetime_naive_utc_utc_z_day (line 903) | def test_numpy_datetime_naive_utc_utc_z_day(self):
    method test_numpy_datetime_naive_utc_utc_z_hour (line 914) | def test_numpy_datetime_naive_utc_utc_z_hour(self):
    method test_numpy_datetime_naive_utc_utc_z_minute (line 925) | def test_numpy_datetime_naive_utc_utc_z_minute(self):
    method test_numpy_datetime_naive_utc_utc_z_second (line 936) | def test_numpy_datetime_naive_utc_utc_z_second(self):
    method test_numpy_datetime_naive_utc_utc_z_milli (line 947) | def test_numpy_datetime_naive_utc_utc_z_milli(self):
    method test_numpy_datetime_naive_utc_utc_z_micro (line 958) | def test_numpy_datetime_naive_utc_utc_z_micro(self):
    method test_numpy_datetime_naive_utc_utc_z_nano (line 969) | def test_numpy_datetime_naive_utc_utc_z_nano(self):
    method test_numpy_datetime_omit_microseconds_year (line 980) | def test_numpy_datetime_omit_microseconds_year(self):
    method test_numpy_datetime_omit_microseconds_month (line 989) | def test_numpy_datetime_omit_microseconds_month(self):
    method test_numpy_datetime_omit_microseconds_day (line 998) | def test_numpy_datetime_omit_microseconds_day(self):
    method test_numpy_datetime_omit_microseconds_hour (line 1007) | def test_numpy_datetime_omit_microseconds_hour(self):
    method test_numpy_datetime_omit_microseconds_minute (line 1016) | def test_numpy_datetime_omit_microseconds_minute(self):
    method test_numpy_datetime_omit_microseconds_second (line 1025) | def test_numpy_datetime_omit_microseconds_second(self):
    method test_numpy_datetime_omit_microseconds_milli (line 1034) | def test_numpy_datetime_omit_microseconds_milli(self):
    method test_numpy_datetime_omit_mic
Condensed preview — 570 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,496K chars).
[
  {
    "path": ".gitattributes",
    "chars": 35,
    "preview": "include/yyjson/* linguist-vendored\n"
  },
  {
    "path": ".github/actions/manylinux/action.yaml",
    "chars": 1306,
    "preview": "# SPDX-License-Identifier: MPL-2.0\n# Copyright ijl (2024-2025)\n\nname: manylinux\n\ninputs:\n  arch:\n    required: true\n  in"
  },
  {
    "path": ".github/workflows/artifact.yaml",
    "chars": 25116,
    "preview": "# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n# Copyright ijl (2022-2026), messense (2022), Dominic LoBue (2022)\n\nname:"
  },
  {
    "path": ".github/workflows/lint.yaml",
    "chars": 538,
    "preview": "# SPDX-License-Identifier: MPL-2.0\n# Copyright ijl (2023-2025)\n\nname: lint\non: push\nenv:\n  FORCE_COLOR: \"1\"\n  PIP_DISABL"
  },
  {
    "path": ".github/workflows/unusual.yaml",
    "chars": 1570,
    "preview": "# SPDX-License-Identifier: MPL-2.0\n# Copyright ijl (2023-2026)\n\nname: unusual\non: push\nenv:\n  FORCE_COLOR: \"1\"\n  PIP_DIS"
  },
  {
    "path": ".gitignore",
    "chars": 126,
    "preview": "*.patch\n/.benchmarks\n/.coverage\n/.mypy_cache\n/.pytest_cache\n/.venv*\n/build\n/include/cargo\n/perf.*\n/target\n/vendor\n__pyca"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 25171,
    "preview": "# Changelog\n\n\n## 3.11.7 - 2026-02-02\n\n### Changed\n\n- Use a faster library to serialize `float`. Users with byte-exact re"
  },
  {
    "path": "Cargo.toml",
    "chars": 2646,
    "preview": "[package]\nname = \"orjson\"\nversion = \"3.11.7\"\nauthors = [\"ijl <ijl@mailbox.org>\"]\ndescription = \"Fast, correct Python JSO"
  },
  {
    "path": "LICENSE-APACHE",
    "chars": 10847,
    "preview": "                              Apache License\n                        Version 2.0, January 2004\n                     http"
  },
  {
    "path": "LICENSE-MIT",
    "chars": 1023,
    "preview": "Permission is hereby granted, free of charge, to any\nperson obtaining a copy of this software and associated\ndocumentati"
  },
  {
    "path": "LICENSE-MPL-2.0",
    "chars": 16727,
    "preview": "Mozilla Public License Version 2.0\n==================================\n\n1. Definitions\n--------------\n\n1.1. \"Contributor\""
  },
  {
    "path": "README.md",
    "chars": 40431,
    "preview": "# orjson\n\norjson is a fast, correct JSON library for Python. It\n[benchmarks](https://github.com/ijl/orjson?tab=readme-ov"
  },
  {
    "path": "bench/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "bench/benchmark_dumps.py",
    "chars": 639,
    "preview": "# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n# Copyright ijl (2020-2026), Aarni Koskela (2021)\n\nfrom json import loads"
  },
  {
    "path": "bench/benchmark_loads.py",
    "chars": 684,
    "preview": "# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n# Copyright ijl (2020-2026), Aarni Koskela (2021)\n\nfrom json import loads"
  },
  {
    "path": "bench/data.py",
    "chars": 882,
    "preview": "# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n# Copyright ijl (2019-2026), Aarni Koskela (2021)\n\nimport gc\nfrom json im"
  },
  {
    "path": "bench/requirements.txt",
    "chars": 251,
    "preview": "memory-profiler; python_version<\"3.15\" and implementation_name==\"cpython\"\npandas; python_version<\"3.15\" and implementati"
  },
  {
    "path": "bench/run_func",
    "chars": 754,
    "preview": "#!/usr/bin/env python3\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n# Copyright ijl (2018-2025), Aarni Koskela (2021)\n"
  },
  {
    "path": "bench/util.py",
    "chars": 520,
    "preview": "# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n# Copyright ijl (2018-2022), Aarni Koskela (2021)\n\nimport lzma\nimport os\n"
  },
  {
    "path": "build.rs",
    "chars": 3252,
    "preview": "// SPDX-License-Identifier: MPL-2.0\n// Copyright ijl (2021-2026)\n\nfn main() {\n    let python_config = pyo3_build_config:"
  },
  {
    "path": "ci/config.toml",
    "chars": 327,
    "preview": "[unstable]\nbuild-std = [\"core\", \"std\", \"alloc\", \"proc_macro\", \"panic_abort\"]\ntrim-paths = true\n\n[target.x86_64-apple-dar"
  },
  {
    "path": "ci/sdist.toml",
    "chars": 108,
    "preview": "[source.crates-io]\nreplace-with = \"vendored-sources\"\n\n[source.vendored-sources]\ndirectory = \"include/cargo\"\n"
  },
  {
    "path": "data/jsonchecker/fail01.json",
    "chars": 60,
    "preview": "\"A JSON payload should be an object or array, not a string.\""
  },
  {
    "path": "data/jsonchecker/fail02.json",
    "chars": 17,
    "preview": "[\"Unclosed array\""
  },
  {
    "path": "data/jsonchecker/fail03.json",
    "chars": 37,
    "preview": "{unquoted_key: \"keys must be quoted\"}"
  },
  {
    "path": "data/jsonchecker/fail04.json",
    "chars": 16,
    "preview": "[\"extra comma\",]"
  },
  {
    "path": "data/jsonchecker/fail05.json",
    "chars": 24,
    "preview": "[\"double extra comma\",,]"
  },
  {
    "path": "data/jsonchecker/fail06.json",
    "chars": 26,
    "preview": "[   , \"<-- missing value\"]"
  },
  {
    "path": "data/jsonchecker/fail07.json",
    "chars": 26,
    "preview": "[\"Comma after the close\"],"
  },
  {
    "path": "data/jsonchecker/fail08.json",
    "chars": 16,
    "preview": "[\"Extra close\"]]"
  },
  {
    "path": "data/jsonchecker/fail09.json",
    "chars": 22,
    "preview": "{\"Extra comma\": true,}"
  },
  {
    "path": "data/jsonchecker/fail10.json",
    "chars": 58,
    "preview": "{\"Extra value after close\": true} \"misplaced quoted value\""
  },
  {
    "path": "data/jsonchecker/fail11.json",
    "chars": 29,
    "preview": "{\"Illegal expression\": 1 + 2}"
  },
  {
    "path": "data/jsonchecker/fail12.json",
    "chars": 31,
    "preview": "{\"Illegal invocation\": alert()}"
  },
  {
    "path": "data/jsonchecker/fail13.json",
    "chars": 43,
    "preview": "{\"Numbers cannot have leading zeroes\": 013}"
  },
  {
    "path": "data/jsonchecker/fail14.json",
    "chars": 31,
    "preview": "{\"Numbers cannot be hex\": 0x14}"
  },
  {
    "path": "data/jsonchecker/fail15.json",
    "chars": 34,
    "preview": "[\"Illegal backslash escape: \\x15\"]"
  },
  {
    "path": "data/jsonchecker/fail16.json",
    "chars": 8,
    "preview": "[\\naked]"
  },
  {
    "path": "data/jsonchecker/fail17.json",
    "chars": 34,
    "preview": "[\"Illegal backslash escape: \\017\"]"
  },
  {
    "path": "data/jsonchecker/fail18.json",
    "chars": 50,
    "preview": "[[[[[[[[[[[[[[[[[[[[\"Too deep\"]]]]]]]]]]]]]]]]]]]]"
  },
  {
    "path": "data/jsonchecker/fail19.json",
    "chars": 22,
    "preview": "{\"Missing colon\" null}"
  },
  {
    "path": "data/jsonchecker/fail20.json",
    "chars": 23,
    "preview": "{\"Double colon\":: null}"
  },
  {
    "path": "data/jsonchecker/fail21.json",
    "chars": 32,
    "preview": "{\"Comma instead of colon\", null}"
  },
  {
    "path": "data/jsonchecker/fail22.json",
    "chars": 33,
    "preview": "[\"Colon instead of comma\": false]"
  },
  {
    "path": "data/jsonchecker/fail23.json",
    "chars": 20,
    "preview": "[\"Bad value\", truth]"
  },
  {
    "path": "data/jsonchecker/fail24.json",
    "chars": 16,
    "preview": "['single quote']"
  },
  {
    "path": "data/jsonchecker/fail25.json",
    "chars": 29,
    "preview": "[\"\ttab\tcharacter\tin\tstring\t\"]"
  },
  {
    "path": "data/jsonchecker/fail26.json",
    "chars": 38,
    "preview": "[\"tab\\   character\\   in\\  string\\  \"]"
  },
  {
    "path": "data/jsonchecker/fail27.json",
    "chars": 14,
    "preview": "[\"line\nbreak\"]"
  },
  {
    "path": "data/jsonchecker/fail28.json",
    "chars": 15,
    "preview": "[\"line\\\nbreak\"]"
  },
  {
    "path": "data/jsonchecker/fail29.json",
    "chars": 4,
    "preview": "[0e]"
  },
  {
    "path": "data/jsonchecker/fail30.json",
    "chars": 5,
    "preview": "[0e+]"
  },
  {
    "path": "data/jsonchecker/fail31.json",
    "chars": 7,
    "preview": "[0e+-1]"
  },
  {
    "path": "data/jsonchecker/fail32.json",
    "chars": 40,
    "preview": "{\"Comma instead if closing brace\": true,"
  },
  {
    "path": "data/jsonchecker/fail33.json",
    "chars": 12,
    "preview": "[\"mismatch\"}"
  },
  {
    "path": "data/jsonchecker/pass01.json",
    "chars": 1441,
    "preview": "[\n    \"JSON Test Pattern pass1\",\n    {\"object with 1 member\":[\"array with 1 element\"]},\n    {},\n    [],\n    -42,\n    tru"
  },
  {
    "path": "data/jsonchecker/pass02.json",
    "chars": 52,
    "preview": "[[[[[[[[[[[[[[[[[[[\"Not too deep\"]]]]]]]]]]]]]]]]]]]"
  },
  {
    "path": "data/jsonchecker/pass03.json",
    "chars": 148,
    "preview": "{\n    \"JSON Test Pattern pass3\": {\n        \"The outermost value\": \"must be an object or array.\",\n        \"In this test\":"
  },
  {
    "path": "data/parsing/i_number_double_huge_neg_exp.json",
    "chars": 14,
    "preview": "[123.456e-789]"
  },
  {
    "path": "data/parsing/i_number_huge_exp.json",
    "chars": 137,
    "preview": "[0.4e0066999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
  },
  {
    "path": "data/parsing/i_number_neg_int_huge_exp.json",
    "chars": 10,
    "preview": "[-1e+9999]"
  },
  {
    "path": "data/parsing/i_number_pos_double_huge_exp.json",
    "chars": 11,
    "preview": "[1.5e+9999]"
  },
  {
    "path": "data/parsing/i_number_real_neg_overflow.json",
    "chars": 16,
    "preview": "[-123123e100000]"
  },
  {
    "path": "data/parsing/i_number_real_pos_overflow.json",
    "chars": 15,
    "preview": "[123123e100000]"
  },
  {
    "path": "data/parsing/i_number_real_underflow.json",
    "chars": 15,
    "preview": "[123e-10000000]"
  },
  {
    "path": "data/parsing/i_number_too_big_neg_int.json",
    "chars": 33,
    "preview": "[-123123123123123123123123123123]"
  },
  {
    "path": "data/parsing/i_number_too_big_pos_int.json",
    "chars": 23,
    "preview": "[100000000000000000000]"
  },
  {
    "path": "data/parsing/i_number_very_big_negative_int.json",
    "chars": 51,
    "preview": "[-237462374673276894279832749832423479823246327846]"
  },
  {
    "path": "data/parsing/i_object_key_lone_2nd_surrogate.json",
    "chars": 12,
    "preview": "{\"\\uDFAA\":0}"
  },
  {
    "path": "data/parsing/i_string_1st_surrogate_but_2nd_missing.json",
    "chars": 10,
    "preview": "[\"\\uDADA\"]"
  },
  {
    "path": "data/parsing/i_string_1st_valid_surrogate_2nd_invalid.json",
    "chars": 16,
    "preview": "[\"\\uD888\\u1234\"]"
  },
  {
    "path": "data/parsing/i_string_UTF-8_invalid_sequence.json",
    "chars": 6,
    "preview": "[\"日ш\"]"
  },
  {
    "path": "data/parsing/i_string_UTF8_surrogate_U+D800.json",
    "chars": 4,
    "preview": "[\"\"]"
  },
  {
    "path": "data/parsing/i_string_incomplete_surrogate_and_escape_valid.json",
    "chars": 12,
    "preview": "[\"\\uD800\\n\"]"
  },
  {
    "path": "data/parsing/i_string_incomplete_surrogate_pair.json",
    "chars": 11,
    "preview": "[\"\\uDd1ea\"]"
  },
  {
    "path": "data/parsing/i_string_incomplete_surrogates_escape_valid.json",
    "chars": 18,
    "preview": "[\"\\uD800\\uD800\\n\"]"
  },
  {
    "path": "data/parsing/i_string_invalid_lonely_surrogate.json",
    "chars": 10,
    "preview": "[\"\\ud800\"]"
  },
  {
    "path": "data/parsing/i_string_invalid_surrogate.json",
    "chars": 13,
    "preview": "[\"\\ud800abc\"]"
  },
  {
    "path": "data/parsing/i_string_invalid_utf-8.json",
    "chars": 4,
    "preview": "[\"\"]"
  },
  {
    "path": "data/parsing/i_string_inverted_surrogates_U+1D11E.json",
    "chars": 16,
    "preview": "[\"\\uDd1e\\uD834\"]"
  },
  {
    "path": "data/parsing/i_string_iso_latin_1.json",
    "chars": 4,
    "preview": "[\"\"]"
  },
  {
    "path": "data/parsing/i_string_lone_second_surrogate.json",
    "chars": 10,
    "preview": "[\"\\uDFAA\"]"
  },
  {
    "path": "data/parsing/i_string_lone_utf8_continuation_byte.json",
    "chars": 4,
    "preview": "[\"\"]"
  },
  {
    "path": "data/parsing/i_string_not_in_unicode_range.json",
    "chars": 4,
    "preview": "[\"\"]"
  },
  {
    "path": "data/parsing/i_string_overlong_sequence_2_bytes.json",
    "chars": 4,
    "preview": "[\"\"]"
  },
  {
    "path": "data/parsing/i_string_overlong_sequence_6_bytes.json",
    "chars": 4,
    "preview": "[\"\"]"
  },
  {
    "path": "data/parsing/i_string_overlong_sequence_6_bytes_null.json",
    "chars": 4,
    "preview": "[\"\"]"
  },
  {
    "path": "data/parsing/i_string_truncated-utf-8.json",
    "chars": 4,
    "preview": "[\"\"]"
  },
  {
    "path": "data/parsing/i_structure_UTF-8_BOM_empty_object.json",
    "chars": 3,
    "preview": "{}"
  },
  {
    "path": "data/parsing/n_array_1_true_without_comma.json",
    "chars": 8,
    "preview": "[1 true]"
  },
  {
    "path": "data/parsing/n_array_a_invalid_utf8.json",
    "chars": 3,
    "preview": "[a]"
  },
  {
    "path": "data/parsing/n_array_colon_instead_of_comma.json",
    "chars": 7,
    "preview": "[\"\": 1]"
  },
  {
    "path": "data/parsing/n_array_comma_after_close.json",
    "chars": 5,
    "preview": "[\"\"],"
  },
  {
    "path": "data/parsing/n_array_comma_and_number.json",
    "chars": 4,
    "preview": "[,1]"
  },
  {
    "path": "data/parsing/n_array_double_comma.json",
    "chars": 6,
    "preview": "[1,,2]"
  },
  {
    "path": "data/parsing/n_array_double_extra_comma.json",
    "chars": 7,
    "preview": "[\"x\",,]"
  },
  {
    "path": "data/parsing/n_array_extra_close.json",
    "chars": 6,
    "preview": "[\"x\"]]"
  },
  {
    "path": "data/parsing/n_array_extra_comma.json",
    "chars": 5,
    "preview": "[\"\",]"
  },
  {
    "path": "data/parsing/n_array_incomplete.json",
    "chars": 4,
    "preview": "[\"x\""
  },
  {
    "path": "data/parsing/n_array_incomplete_invalid_value.json",
    "chars": 2,
    "preview": "[x"
  },
  {
    "path": "data/parsing/n_array_inner_array_no_comma.json",
    "chars": 6,
    "preview": "[3[4]]"
  },
  {
    "path": "data/parsing/n_array_invalid_utf8.json",
    "chars": 2,
    "preview": "[]"
  },
  {
    "path": "data/parsing/n_array_items_separated_by_semicolon.json",
    "chars": 5,
    "preview": "[1:2]"
  },
  {
    "path": "data/parsing/n_array_just_comma.json",
    "chars": 3,
    "preview": "[,]"
  },
  {
    "path": "data/parsing/n_array_just_minus.json",
    "chars": 3,
    "preview": "[-]"
  },
  {
    "path": "data/parsing/n_array_missing_value.json",
    "chars": 9,
    "preview": "[   , \"\"]"
  },
  {
    "path": "data/parsing/n_array_newlines_unclosed.json",
    "chars": 11,
    "preview": "[\"a\",\n4\n,1,"
  },
  {
    "path": "data/parsing/n_array_number_and_comma.json",
    "chars": 4,
    "preview": "[1,]"
  },
  {
    "path": "data/parsing/n_array_number_and_several_commas.json",
    "chars": 5,
    "preview": "[1,,]"
  },
  {
    "path": "data/parsing/n_array_spaces_vertical_tab_formfeed.json",
    "chars": 8,
    "preview": "[\"\u000ba\"\\f]"
  },
  {
    "path": "data/parsing/n_array_star_inside.json",
    "chars": 3,
    "preview": "[*]"
  },
  {
    "path": "data/parsing/n_array_unclosed.json",
    "chars": 3,
    "preview": "[\"\""
  },
  {
    "path": "data/parsing/n_array_unclosed_trailing_comma.json",
    "chars": 3,
    "preview": "[1,"
  },
  {
    "path": "data/parsing/n_array_unclosed_with_new_lines.json",
    "chars": 8,
    "preview": "[1,\n1\n,1"
  },
  {
    "path": "data/parsing/n_array_unclosed_with_object_inside.json",
    "chars": 3,
    "preview": "[{}"
  },
  {
    "path": "data/parsing/n_incomplete_false.json",
    "chars": 6,
    "preview": "[fals]"
  },
  {
    "path": "data/parsing/n_incomplete_null.json",
    "chars": 5,
    "preview": "[nul]"
  },
  {
    "path": "data/parsing/n_incomplete_true.json",
    "chars": 5,
    "preview": "[tru]"
  },
  {
    "path": "data/parsing/n_number_++.json",
    "chars": 8,
    "preview": "[++1234]"
  },
  {
    "path": "data/parsing/n_number_+1.json",
    "chars": 4,
    "preview": "[+1]"
  },
  {
    "path": "data/parsing/n_number_+Inf.json",
    "chars": 6,
    "preview": "[+Inf]"
  },
  {
    "path": "data/parsing/n_number_-01.json",
    "chars": 5,
    "preview": "[-01]"
  },
  {
    "path": "data/parsing/n_number_-1.0..json",
    "chars": 7,
    "preview": "[-1.0.]"
  },
  {
    "path": "data/parsing/n_number_-2..json",
    "chars": 5,
    "preview": "[-2.]"
  },
  {
    "path": "data/parsing/n_number_-NaN.json",
    "chars": 6,
    "preview": "[-NaN]"
  },
  {
    "path": "data/parsing/n_number_.-1.json",
    "chars": 5,
    "preview": "[.-1]"
  },
  {
    "path": "data/parsing/n_number_.2e-3.json",
    "chars": 7,
    "preview": "[.2e-3]"
  },
  {
    "path": "data/parsing/n_number_0.1.2.json",
    "chars": 7,
    "preview": "[0.1.2]"
  },
  {
    "path": "data/parsing/n_number_0.3e+.json",
    "chars": 7,
    "preview": "[0.3e+]"
  },
  {
    "path": "data/parsing/n_number_0.3e.json",
    "chars": 6,
    "preview": "[0.3e]"
  },
  {
    "path": "data/parsing/n_number_0.e1.json",
    "chars": 6,
    "preview": "[0.e1]"
  },
  {
    "path": "data/parsing/n_number_0_capital_E+.json",
    "chars": 5,
    "preview": "[0E+]"
  },
  {
    "path": "data/parsing/n_number_0_capital_E.json",
    "chars": 4,
    "preview": "[0E]"
  },
  {
    "path": "data/parsing/n_number_0e+.json",
    "chars": 5,
    "preview": "[0e+]"
  },
  {
    "path": "data/parsing/n_number_0e.json",
    "chars": 4,
    "preview": "[0e]"
  },
  {
    "path": "data/parsing/n_number_1.0e+.json",
    "chars": 7,
    "preview": "[1.0e+]"
  },
  {
    "path": "data/parsing/n_number_1.0e-.json",
    "chars": 7,
    "preview": "[1.0e-]"
  },
  {
    "path": "data/parsing/n_number_1.0e.json",
    "chars": 6,
    "preview": "[1.0e]"
  },
  {
    "path": "data/parsing/n_number_1_000.json",
    "chars": 9,
    "preview": "[1 000.0]"
  },
  {
    "path": "data/parsing/n_number_1eE2.json",
    "chars": 6,
    "preview": "[1eE2]"
  },
  {
    "path": "data/parsing/n_number_2.e+3.json",
    "chars": 7,
    "preview": "[2.e+3]"
  },
  {
    "path": "data/parsing/n_number_2.e-3.json",
    "chars": 7,
    "preview": "[2.e-3]"
  },
  {
    "path": "data/parsing/n_number_2.e3.json",
    "chars": 6,
    "preview": "[2.e3]"
  },
  {
    "path": "data/parsing/n_number_9.e+.json",
    "chars": 6,
    "preview": "[9.e+]"
  },
  {
    "path": "data/parsing/n_number_Inf.json",
    "chars": 5,
    "preview": "[Inf]"
  },
  {
    "path": "data/parsing/n_number_NaN.json",
    "chars": 5,
    "preview": "[NaN]"
  },
  {
    "path": "data/parsing/n_number_U+FF11_fullwidth_digit_one.json",
    "chars": 3,
    "preview": "[1]"
  },
  {
    "path": "data/parsing/n_number_expression.json",
    "chars": 5,
    "preview": "[1+2]"
  },
  {
    "path": "data/parsing/n_number_hex_1_digit.json",
    "chars": 5,
    "preview": "[0x1]"
  },
  {
    "path": "data/parsing/n_number_hex_2_digits.json",
    "chars": 6,
    "preview": "[0x42]"
  },
  {
    "path": "data/parsing/n_number_infinity.json",
    "chars": 10,
    "preview": "[Infinity]"
  },
  {
    "path": "data/parsing/n_number_invalid+-.json",
    "chars": 7,
    "preview": "[0e+-1]"
  },
  {
    "path": "data/parsing/n_number_invalid-negative-real.json",
    "chars": 13,
    "preview": "[-123.123foo]"
  },
  {
    "path": "data/parsing/n_number_invalid-utf-8-in-bigger-int.json",
    "chars": 5,
    "preview": "[123]"
  },
  {
    "path": "data/parsing/n_number_invalid-utf-8-in-exponent.json",
    "chars": 5,
    "preview": "[1e1]"
  },
  {
    "path": "data/parsing/n_number_invalid-utf-8-in-int.json",
    "chars": 4,
    "preview": "[0]\n"
  },
  {
    "path": "data/parsing/n_number_minus_infinity.json",
    "chars": 11,
    "preview": "[-Infinity]"
  },
  {
    "path": "data/parsing/n_number_minus_sign_with_trailing_garbage.json",
    "chars": 6,
    "preview": "[-foo]"
  },
  {
    "path": "data/parsing/n_number_minus_space_1.json",
    "chars": 5,
    "preview": "[- 1]"
  },
  {
    "path": "data/parsing/n_number_neg_int_starting_with_zero.json",
    "chars": 6,
    "preview": "[-012]"
  },
  {
    "path": "data/parsing/n_number_neg_real_without_int_part.json",
    "chars": 7,
    "preview": "[-.123]"
  },
  {
    "path": "data/parsing/n_number_neg_with_garbage_at_end.json",
    "chars": 5,
    "preview": "[-1x]"
  },
  {
    "path": "data/parsing/n_number_real_garbage_after_e.json",
    "chars": 5,
    "preview": "[1ea]"
  },
  {
    "path": "data/parsing/n_number_real_with_invalid_utf8_after_e.json",
    "chars": 4,
    "preview": "[1e]"
  },
  {
    "path": "data/parsing/n_number_real_without_fractional_part.json",
    "chars": 4,
    "preview": "[1.]"
  },
  {
    "path": "data/parsing/n_number_starting_with_dot.json",
    "chars": 6,
    "preview": "[.123]"
  },
  {
    "path": "data/parsing/n_number_with_alpha.json",
    "chars": 8,
    "preview": "[1.2a-3]"
  },
  {
    "path": "data/parsing/n_number_with_alpha_char.json",
    "chars": 25,
    "preview": "[1.8011670033376514H-308]"
  },
  {
    "path": "data/parsing/n_number_with_leading_zero.json",
    "chars": 5,
    "preview": "[012]"
  },
  {
    "path": "data/parsing/n_object_bad_value.json",
    "chars": 12,
    "preview": "[\"x\", truth]"
  },
  {
    "path": "data/parsing/n_object_bracket_key.json",
    "chars": 9,
    "preview": "{[: \"x\"}\n"
  },
  {
    "path": "data/parsing/n_object_comma_instead_of_colon.json",
    "chars": 11,
    "preview": "{\"x\", null}"
  },
  {
    "path": "data/parsing/n_object_double_colon.json",
    "chars": 10,
    "preview": "{\"x\"::\"b\"}"
  },
  {
    "path": "data/parsing/n_object_emoji.json",
    "chars": 4,
    "preview": "{🇨🇭}"
  },
  {
    "path": "data/parsing/n_object_garbage_at_end.json",
    "chars": 13,
    "preview": "{\"a\":\"a\" 123}"
  },
  {
    "path": "data/parsing/n_object_key_with_single_quotes.json",
    "chars": 14,
    "preview": "{key: 'value'}"
  },
  {
    "path": "data/parsing/n_object_lone_continuation_byte_in_key_and_trailing_comma.json",
    "chars": 9,
    "preview": "{\"\":\"0\",}"
  },
  {
    "path": "data/parsing/n_object_missing_colon.json",
    "chars": 7,
    "preview": "{\"a\" b}"
  },
  {
    "path": "data/parsing/n_object_missing_key.json",
    "chars": 6,
    "preview": "{:\"b\"}"
  },
  {
    "path": "data/parsing/n_object_missing_semicolon.json",
    "chars": 9,
    "preview": "{\"a\" \"b\"}"
  },
  {
    "path": "data/parsing/n_object_missing_value.json",
    "chars": 5,
    "preview": "{\"a\":"
  },
  {
    "path": "data/parsing/n_object_no-colon.json",
    "chars": 4,
    "preview": "{\"a\""
  },
  {
    "path": "data/parsing/n_object_non_string_key.json",
    "chars": 5,
    "preview": "{1:1}"
  },
  {
    "path": "data/parsing/n_object_non_string_key_but_huge_number_instead.json",
    "chars": 13,
    "preview": "{9999E9999:1}"
  },
  {
    "path": "data/parsing/n_object_repeated_null_null.json",
    "chars": 21,
    "preview": "{null:null,null:null}"
  },
  {
    "path": "data/parsing/n_object_several_trailing_commas.json",
    "chars": 13,
    "preview": "{\"id\":0,,,,,}"
  },
  {
    "path": "data/parsing/n_object_single_quote.json",
    "chars": 7,
    "preview": "{'a':0}"
  },
  {
    "path": "data/parsing/n_object_trailing_comma.json",
    "chars": 9,
    "preview": "{\"id\":0,}"
  },
  {
    "path": "data/parsing/n_object_trailing_comment.json",
    "chars": 13,
    "preview": "{\"a\":\"b\"}/**/"
  },
  {
    "path": "data/parsing/n_object_trailing_comment_open.json",
    "chars": 14,
    "preview": "{\"a\":\"b\"}/**//"
  },
  {
    "path": "data/parsing/n_object_trailing_comment_slash_open.json",
    "chars": 11,
    "preview": "{\"a\":\"b\"}//"
  },
  {
    "path": "data/parsing/n_object_trailing_comment_slash_open_incomplete.json",
    "chars": 10,
    "preview": "{\"a\":\"b\"}/"
  },
  {
    "path": "data/parsing/n_object_two_commas_in_a_row.json",
    "chars": 18,
    "preview": "{\"a\":\"b\",,\"c\":\"d\"}"
  },
  {
    "path": "data/parsing/n_object_unquoted_key.json",
    "chars": 8,
    "preview": "{a: \"b\"}"
  },
  {
    "path": "data/parsing/n_object_unterminated-value.json",
    "chars": 7,
    "preview": "{\"a\":\"a"
  },
  {
    "path": "data/parsing/n_object_with_single_string.json",
    "chars": 22,
    "preview": "{ \"foo\" : \"bar\", \"a\" }"
  },
  {
    "path": "data/parsing/n_object_with_trailing_garbage.json",
    "chars": 10,
    "preview": "{\"a\":\"b\"}#"
  },
  {
    "path": "data/parsing/n_single_space.json",
    "chars": 1,
    "preview": " "
  },
  {
    "path": "data/parsing/n_string_1_surrogate_then_escape.json",
    "chars": 11,
    "preview": "[\"\\uD800\\\"]"
  },
  {
    "path": "data/parsing/n_string_1_surrogate_then_escape_u.json",
    "chars": 12,
    "preview": "[\"\\uD800\\u\"]"
  }
]

// ... and 370 more files (download for full content)

About this extraction

This page contains the full source code of the ijl/orjson GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 570 files (1.3 MB), approximately 404.4k tokens, and a symbol index with 2696 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!