| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package vom |
| |
| // Version is the vom version. |
| type Version byte |
| |
| const ( |
| Version80 = Version(0x80) |
| Version81 = Version(0x81) |
| |
| DefaultVersion = Version81 |
| ) |
| |
| // Built-in type Ids |
| const ( |
| // Primitive types. |
| WireIdBool = TypeId(1) |
| WireIdByte = TypeId(2) |
| WireIdString = TypeId(3) |
| WireIdUint16 = TypeId(4) |
| WireIdUint32 = TypeId(5) |
| WireIdUint64 = TypeId(6) |
| WireIdInt16 = TypeId(7) |
| WireIdInt32 = TypeId(8) |
| WireIdInt64 = TypeId(9) |
| WireIdFloat32 = TypeId(10) |
| WireIdFloat64 = TypeId(11) |
| // Wire ids 12 and 13 were previously used for complex64 and complex 128. |
| WireIdTypeObject = TypeId(14) |
| WireIdAny = TypeId(15) |
| WireIdInt8 = TypeId(16) |
| |
| // Other commonly used composites. |
| WireIdByteList = TypeId(39) |
| WireIdStringList = TypeId(40) |
| |
| // The first user-defined TypeId is 41. |
| WireIdFirstUserType = TypeId(41) |
| ) |
| |
| // TypeId uniquely identifies a type definition within a vom stream. |
| type TypeId uint64 |
| |
| // The wireType union is used to encode the payload part of each type message, |
| // using the regular rules for encoding union values. But unlike our regular |
| // encoding, the type message for wireType itself (and its fields) are never |
| // encoded; we need to bootstrap the system. Thus unlike regular values, the |
| // ordering of fields within the wire* types cannot be changed. |
| type wireType union { |
| // FIELD INDICES MUST NOT BE CHANGED. |
| NamedT wireNamed // INDEX = 0 |
| EnumT wireEnum // INDEX = 1 |
| ArrayT wireArray // INDEX = 2 |
| ListT wireList // INDEX = 3 |
| SetT wireSet // INDEX = 4 |
| MapT wireMap // INDEX = 5 |
| StructT wireStruct // INDEX = 6 |
| UnionT wireUnion // INDEX = 7 |
| OptionalT wireOptional // INDEX = 8 |
| } |
| |
| // wireNamed represents a type definition for named primitives. |
| type wireNamed struct { |
| Name string |
| Base TypeId |
| } |
| |
| // wireEnum represents an type definition for enum types. |
| type wireEnum struct { |
| Name string |
| Labels []string |
| } |
| |
| // wireArray represents an type definition for array types. |
| type wireArray struct { |
| Name string |
| Elem TypeId |
| Len uint64 |
| } |
| |
| // wireList represents a type definition for list types. |
| type wireList struct { |
| Name string |
| Elem TypeId |
| } |
| |
| // wireSet represents a type definition for set types. |
| type wireSet struct { |
| Name string |
| Key TypeId |
| } |
| |
| // wireMap represents a type definition for map types. |
| type wireMap struct { |
| Name string |
| Key TypeId |
| Elem TypeId |
| } |
| |
| // wireField represents a field in a struct or union type. |
| type wireField struct { |
| Name string |
| Type TypeId |
| } |
| |
| // wireStruct represents a type definition for struct types. |
| type wireStruct struct { |
| Name string |
| Fields []wireField |
| } |
| |
| // wireUnion represents a type definition for union types. |
| type wireUnion struct { |
| Name string |
| Fields []wireField |
| } |
| |
| // wireOptional represents an type definition for optional types. |
| type wireOptional struct { |
| Name string |
| Elem TypeId |
| } |
| |
| // Control codes used in VOM wire format |
| // |
| // region 1: 0x80...0xBF (64 entries) |
| // region 2: 0xC0...0xDF (32 entries) |
| // region 3: 0xE0...0xEF (16 entries) |
| const ( |
| WireCtrlNil = byte(0xe0) // Nil in optional or any |
| WireCtrlEnd = byte(0xe1) // End of struct or union |
| WireCtrlTypeIncomplete = byte(0xe2) // Marks that the type message is incomplete until future messages are received |
| ) |