The Serde Data Model
Serde Data Model Types
The serde data model, as defined by the Serde Book, contains 29 types, each referred to as "A Serde Data Type".
1 - bool
A type capable of expressing exclusively the values true or false.
2 - i8
A signed integer type, capable of expressing any value in the range of -128..=127 (or -(2^7)..=((2^7) - 1)).
3 - i16
A signed integer type, capable of expressing any value in the range of -32768..=32767 (or -(2^15)..=((2^15) - 1)).
4 - i32
A signed integer type, capable of expressing any value in the range of -2147483648..=2147483647 (or -(2^31)..=((2^31) - 1)).
5 - i64
A signed integer type, capable of expressing any value in the range of -9223372036854775808..=9223372036854775807 (or -(2^63)..=((2^63) - 1)).
6 - i128
A signed integer type, capable of expressing any value in the range of -170141183460469231731687303715884105728..=170141183460469231731687303715884105727 (or -(2^127)..=((2^127) - 1)).
7 - u8
An unsigned integer type, capable of expressing any value in the range of 0..=255 (or 0..=((2^8) - 1)).
8 - u16
An unsigned integer type, capable of expressing any value in the range of 0..=65535 (or 0..=((2^16) - 1)).
9 - u32
An unsigned integer type, capable of expressing any value in the range of 0..=4294967295 (or 0..=((2^32) - 1)).
10 - u64
An unsigned integer type, capable of expressing any value in the range of 0..=18446744073709551615 (or 0..=((2^64) - 1)).
11 - u128
An unsigned integer type, capable of expressing any value in the range of 0..=340282366920938463463374607431768211456 (or 0..=((2^128) - 1)).
12 - f32
A "binary32" type defined as defined in IEEE 754-2008.
13 - f64
A "binary64" type defined as defined in IEEE 754-2008.
14 - char
A four-byte type representing a Unicode scalar value.
A Unicode scalar value is defined by Unicode 14.0 Chapter 3 Section 9 - "Unicode Encoding Forms", Definition D76:
Unicode scalar value: Any Unicode code point except high-surrogate and low-surrogate code points.
As a result of this definition, the set of Unicode scalar values consists of the ranges 0x0000_0000 to 0x0000_D7FF and 0x0000_E000 to 0x0010_FFFF inclusive.
15 - string
A type representing a variable quantity of bytes, which together represent a valid UTF-8 code point sequence, as defined by Unicode 14.0 Chapter 3 Section 9 - "Unicode Encoding Forms", Definition D92:
UTF-8 encoding form: The Unicode encoding form that assigns each Unicode scalar value to an unsigned byte sequence of one to four bytes in length, as specified in Table 3-6 and Table 3-7.
This encoding form is stored using the "UTF-8 encoding scheme", as defined by Unicode 14.0 Chapter 3 Section 10 - "Unicode Encoding Schemes", Definition D95:
UTF-8 encoding scheme: The Unicode encoding scheme that serializes a UTF-8 code unit sequence in exactly the same order as the code unit sequence itself.
16 - byte array
A type representing a variable quantity of bytes.
17 - option
A type representing zero or one Serde Data Type.
18 - unit
A type representing an anonymous value containing no data.
19 - unit_struct
A type representing a named value containing no data.
20 - unit_variant
A type representing a named, tagged union variant, containing no data.
21 - newtype_struct
A type representing a named value, containing exactly one anonymous Serde Data Type.
22 - newtype_variant
A type representing a named, tagged union variant, containing exactly one anonymous Serde Data Type.
23 - seq
A type representing a variable quantity of values of a single Serde Data Type, e.g. a "Homogeneous Array".
Values of each element of the seq may have differing values.
24 - tuple
A type representing a fixed quantity of values, each of any Serde Data Type, e.g. a "Heterogeneous Array".
Values of each element of the tuple may have differing values.
25 - tuple_struct
A type representing a named type specifcally containing exactly one tuple Serde Data Type
26 - tuple_variant
A type representing a named, tagged union variant, containing exactly one tuple Serde Data Type.
27 - map
A type representing a variable quantity of key-value pairs. All keys are values of a single Serde Data Type. All values are a values of a single Serde Data Type.
28 - struct
A type representing a fixed quantity of named values, each of any Serde Data Type.
Values of each element of the tuple may have differing values.
NOTE: Similar to
tuples ,structs have a known number of members, however all members of astructalso have a known name.
structs are also similar tomaps, in that each member has a name (as a key) and a value, howeverstructs always have a fixed number of members, and their names are always constant.
29 - struct_variant
A type representing a named, tagged union variant, containing exactly one struct Serde Data type
Meta types
Named and Anonymous types
TODO
Tagged Unions
TODO
References
| Document Name | Full Name | Version |
|---|---|---|
| Serde Book | The Serde Book | v1.0.137 |
| Unicode 14.0 Chapter 3 | The UnicodeĀ® Standard Core Specification, Chapter 3: Conformance | v14.0 |
| IEEE 754-2008 | IEEE Standard for Floating-Point Arithmetic | 2008 |