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
tuple
s ,struct
s have a known number of members, however all members of astruct
also have a known name.
struct
s are also similar tomap
s, in that each member has a name (as a key) and a value, howeverstruct
s 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 |