package core:encoding/json
Index
Constants (1)
Variables (0)
This section is empty.
Procedures (40)
- advance_token
- allow_token
- clone_string
- destroy_value
- expect_token
- get_token
- is_valid
- is_valid_number
- is_valid_string_literal
- make_parser
- make_parser_from_string
- make_tokenizer
- marshal
- marshal_to_builder
- marshal_to_writer
- next_rune
- opt_write_end
- opt_write_indentation
- opt_write_iteration
- opt_write_key
- opt_write_start
- parse
- parse_array
- parse_colon
- parse_comma
- parse_object
- parse_object_body
- parse_object_key
- parse_string
- parse_value
- token_end_pos
- unmarshal
- unmarshal_any
- unmarshal_string
- unquote_string
- validate_array
- validate_object
- validate_object_body
- validate_object_key
- validate_value
Procedure Groups (0)
This section is empty.
Types
Error ¶
Error :: enum int { None, EOF, // Not necessarily an error // Tokenizing Errors Illegal_Character, Invalid_Number, String_Not_Terminated, Invalid_String, // Parsing Errors Unexpected_Token, Expected_String_For_Object_Key, Duplicate_Object_Key, Expected_Colon_After_Key, // Allocating Errors Invalid_Allocator, Out_Of_Memory, }
Marshal_Data_Error ¶
Marshal_Data_Error :: enum int { None, Unsupported_Type, }
Marshal_Error ¶
Marshal_Error :: union { Marshal_Data_Error, io.Error, }
Marshal_Options ¶
Marshal_Options :: struct { // output based on spec spec: Specification, // use line breaks & tab|spaces pretty: bool, // spacing use_spaces: bool, spaces: int, // state indentation: int, // option to output uint in JSON5 & MJSON write_uint_as_hex: bool, // mjson output options mjson_keys_use_quotes: bool, mjson_keys_use_equal_sign: bool, // mjson state mjson_skipped_first_braces_start: bool, mjson_skipped_first_braces_end: bool, }
careful with MJSON maps & non quotes usage as keys without whitespace will lead to bad results
Parser ¶
Parser :: struct { tok: Tokenizer, prev_token: Token, curr_token: Token, spec: Specification, allocator: runtime.Allocator, parse_integers: bool, }
Specification ¶
Specification :: enum int { JSON, JSON5, // https://json5.org/ SJSON, // https://bitsquid.blogspot.com/2009/10/simplified-json-notation.html Bitsquid = 2, MJSON = 2, }
JSON
strict JSON JSON5 pure superset of JSON and valid JavaScript https://json5.org/ * Object keys may be an ECMAScript 5.1 IdentifierName. * Objects may have a single trailing comma. * Arrays may have a single trailing comma. * Strings may be single quoted. * Strings may span multiple lines by escaping new line characters. * Strings may include character escapes * Numbers may be hexadecimal. * Numbers may have a leading or trailing decimal point. * Numbers may be IEEE 754 positive infinity, negative infinity, and NaN. * Numbers may begin with an explicit plus sign. * Single and multi-line comments are allowed. * Additional white space characters are allowed. MJSON pure superset of JSON5, may not be valid JavaScript https://bitsquid.blogspot.com/2009/10/simplified-json-notation.html * All the same features as JSON5 plus extras. * Assume an object definition at the root level (no need to surround entire file with { } ). * Commas are optional, using comma insertion rules with newlines. * Quotes around object keys are optional if the keys are valid identifiers. * : can be replaced with =
Token ¶
Token :: struct { pos: Pos, kind: Token_Kind, text: string, }
Token_Kind ¶
Token_Kind :: enum int { Invalid, EOF, Null, False, True, Infinity, NaN, Ident, Integer, Float, String, Colon, Comma, Open_Brace, Close_Brace, Open_Bracket, Close_Bracket, }
Tokenizer ¶
Tokenizer :: struct { pos: Pos, data: string, r: rune, // current rune w: int, // current rune width in bytes curr_line_offset: int, spec: Specification, parse_integers: bool, insert_comma: bool, }
Unmarshal_Data_Error ¶
Unmarshal_Data_Error :: enum int { Invalid_Data, Invalid_Parameter, Non_Pointer_Parameter, Multiple_Use_Field, }
Unmarshal_Error ¶
Unmarshal_Error :: union { Error, Unmarshal_Data_Error, Unsupported_Type_Error, }
Unsupported_Type_Error ¶
Unsupported_Type_Error :: struct { id: typeid, token: Token, }
Constants
DEFAULT_SPECIFICATION ¶
DEFAULT_SPECIFICATION :: Specification.JSON5
Variables
This section is empty.
Procedures
allow_token ¶
allow_token :: proc "odin" (p: ^Parser, kind: Token_Kind) -> bool {…}
destroy_value ¶
destroy_value :: proc "odin" (value: Value, allocator := context.allocator) {…}
expect_token ¶
expect_token :: proc "odin" (p: ^Parser, kind: Token_Kind) -> Error {…}
is_valid ¶
is_valid :: proc "odin" (data: []u8, spec: Specification = DEFAULT_SPECIFICATION, parse_integers: bool = false) -> bool {…}
NOTE(bill): is_valid will not check for duplicate keys
is_valid_number ¶
is_valid_number :: proc "odin" (str: string, spec: Specification) -> bool {…}
is_valid_string_literal ¶
is_valid_string_literal :: proc "odin" (str: string, spec: Specification) -> bool {…}
make_parser ¶
make_parser :: proc "odin" (data: []u8, spec: Specification = DEFAULT_SPECIFICATION, parse_integers: bool = false, allocator := context.allocator) -> Parser {…}
make_parser_from_string ¶
make_parser_from_string :: proc "odin" (data: string, spec: Specification = DEFAULT_SPECIFICATION, parse_integers: bool = false, allocator := context.allocator) -> Parser {…}
make_tokenizer ¶
make_tokenizer :: proc "odin" (data: string, spec: Specification = DEFAULT_SPECIFICATION, parse_integers: bool = false) -> Tokenizer {…}
marshal ¶
marshal :: proc "odin" (v: any, opt: Marshal_Options = {}, allocator := context.allocator) -> (data: []u8, err: Marshal_Error) {…}
marshal_to_builder ¶
marshal_to_builder :: proc "odin" (b: ^strings.Builder, v: any, opt: ^Marshal_Options) -> Marshal_Error {…}
marshal_to_writer ¶
marshal_to_writer :: proc "odin" (w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: Marshal_Error) {…}
next_rune ¶
next_rune :: proc "odin" (t: ^Tokenizer) -> rune {…}
opt_write_end ¶
opt_write_end :: proc "odin" (w: io.Writer, opt: ^Marshal_Options, c: u8) -> (err: io.Error) {…}
decrease indent, write spacing and insert end byte
opt_write_indentation ¶
opt_write_indentation :: proc "odin" (w: io.Writer, opt: ^Marshal_Options) -> (err: io.Error) {…}
writes current indentation level based on options
opt_write_iteration ¶
opt_write_iteration :: proc "odin" (w: io.Writer, opt: ^Marshal_Options, iteration: int) -> (err: io.Error) {…}
insert comma seperation and write indentations
opt_write_key ¶
opt_write_key :: proc "odin" (w: io.Writer, opt: ^Marshal_Options, name: string) -> (err: io.Error) {…}
write key as quoted string or with optional quotes in mjson
opt_write_start ¶
opt_write_start :: proc "odin" (w: io.Writer, opt: ^Marshal_Options, c: u8) -> (err: io.Error) {…}
insert start byte and increase indentation on pretty
parse ¶
parse :: proc "odin" (data: []u8, spec: Specification = DEFAULT_SPECIFICATION, parse_integers: bool = false, allocator := context.allocator) -> (Value, Error) {…}
parse_comma ¶
parse_comma :: proc "odin" (p: ^Parser) -> (do_break: bool) {…}
parse_object_body ¶
parse_object_body :: proc "odin" (p: ^Parser, end_token: Token_Kind) -> (obj: Object, err: Error) {…}
parse_string ¶
parse_string :: proc "odin" (data: string, spec: Specification = DEFAULT_SPECIFICATION, parse_integers: bool = false, allocator := context.allocator) -> (Value, Error) {…}
unmarshal ¶
unmarshal :: proc "odin" (data: []u8, ptr: ^$T, spec: Specification = DEFAULT_SPECIFICATION, allocator := context.allocator) -> Unmarshal_Error {…}
unmarshal_any ¶
unmarshal_any :: proc "odin" (data: []u8, v: any, spec: Specification = DEFAULT_SPECIFICATION, allocator := context.allocator) -> Unmarshal_Error {…}
unmarshal_string ¶
unmarshal_string :: proc "odin" (data: string, ptr: ^$T, spec: Specification = DEFAULT_SPECIFICATION, allocator := context.allocator) -> Unmarshal_Error {…}
unquote_string ¶
unquote_string :: proc "odin" (token: Token, spec: Specification, allocator := context.allocator) -> (value: string, err: Error) {…}
IMPORTANT NOTE(bill): unquote_string assumes a mostly valid string
validate_array ¶
validate_array :: proc "odin" (p: ^Parser) -> bool {…}
validate_object ¶
validate_object :: proc "odin" (p: ^Parser) -> bool {…}
validate_object_body ¶
validate_object_body :: proc "odin" (p: ^Parser, end_token: Token_Kind) -> bool {…}
validate_object_key ¶
validate_object_key :: proc "odin" (p: ^Parser) -> bool {…}
validate_value ¶
validate_value :: proc "odin" (p: ^Parser) -> bool {…}
Procedure Groups
This section is empty.
Source Files
Generation Information
Generated with odin version dev-2023-03 (vendor "odin") Windows_amd64 @ 2023-03-29 21:09:05.348390600 +0000 UTC