Data Models
A data model represents a set of types that are supported by Getty. The
types within a data model are purely conceptual; they aren't actually Zig
types. For example, there is no i32 or u64 in either of Getty's data
models. Instead, they're both considered to be Integers.
Models
Getty maintains two data models: one for serialization and another for deserialization.
Serialization
- Boolean
-
Represented by a
boolvalue. - Enum
-
Represented by any
enumvalue. - Float
-
Represented by any floating-point value (
comptime_float,f16,f32,f64,f80,f128). - Integer
-
Represented by any integer value (
comptime_int,u0–u65535,i0–i65535). - Map
-
Represented by a
getty.ser.Mapinterface value. - Null
-
Represented by a
nullvalue. - Seq
-
Represented by a
getty.ser.Seqinterface value. - Some
-
Represented by the payload of an optional value.
- String
-
Represented by any string value as determined by
std.meta.trait.isZigString. - Structure
-
Represented by a
getty.ser.Structureinterface value. - Void
-
Represented by a
voidvalue.
Deserialization
- Boolean
-
Represented by a
boolvalue. - Enum
-
Represented by any
enumvalue. - Float
-
Represented by any floating-point value (
comptime_float,f16,f32,f64,f80,f128). - Integer
-
Represented by any integer value (
comptime_int,u0–u65535,i0–i65535). - Map
-
Represented by a
getty.de.MapAccessinterface value. - Null
-
Represented by a
nullvalue. - Seq
-
Represented by a
getty.de.SeqAccessinterface value. - Some
-
Represented by the payload of an optional value.
- String
-
Represented by any string value as determined by
std.meta.trait.isZigString. - Union
-
Represented by a
getty.de.UnionAccessinterface value and agetty.de.VariantAccessinterface value. - Void
-
Represented by a
voidvalue.
Motivation
Getty's data models establish a generic baseline from which (de)serializers can operate.
This design often simplifies the job of a (de)serializer significantly. For
example, suppose you wanted to serialize []i32, [100]i32,
std.ArrayList(i32), and std.TailQueue(i32) values. Since Zig
considers all of these types to be different, you'd have to write unique
serialization logic for all of them (as well as for integers)!
In Getty, you don't have to do nearly as much work. Getty considers all of the
aforementioned types to be the same: they are all Sequences. This means that
you only have to specify the serialization process for two types: Integers
and Sequences. And by doing so, you'll automatically be able to serialize
values of any of the aforementioned types, plus any other value whose type is
supported by Getty and is considered a Sequence, such as std.SinglyLinkedList
and std.BoundedArray.
Interactions
Notice how (de)serializers in Getty never interact directly with Zig.
- Serializers receive values from Getty's data model and serialize them into a data format.
- Deserializers receive values from a data format and deserialize them into Getty's data model.