1 # Licensed to the Apache Software Foundation (ASF) under one
2 # or more contributor license agreements. See the NOTICE file
3 # distributed with this work for additional information
4 # regarding copyright ownership. The ASF licenses this file
5 # to you under the Apache License, Version 2.0 (the
6 # "License"); you may not use this file except in compliance
7 # with the License. You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
17 FlatBuffers.@scopedenum MetadataVersion::Int16 V1 V2 V3 V4 V5
19 struct Null <: FlatBuffers.Table
24 Base.propertynames(x::Null) = ()
26 nullStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 0)
27 nullEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
29 struct Struct <: FlatBuffers.Table
34 Base.propertynames(x::Struct) = ()
36 structStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 0)
37 structEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
39 struct List <: FlatBuffers.Table
44 Base.propertynames(x::List) = ()
46 listStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 0)
47 listEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
49 struct LargeList <: FlatBuffers.Table
54 Base.propertynames(x::LargeList) = ()
56 largeListStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 0)
57 largeListEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
59 struct FixedSizeList <: FlatBuffers.Table
64 Base.propertynames(x::FixedSizeList) = (:listSize,)
66 function Base.getproperty(x::FixedSizeList, field::Symbol)
67 if field === :listSize
68 o = FlatBuffers.offset(x, 4)
69 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), Int32)
75 fixedSizeListStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 1)
76 fixedSizeListAddListSize(b::FlatBuffers.Builder, listSize::Int32) = FlatBuffers.prependslot!(b, 0, listSize, 0)
77 fixedSizeListEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
79 struct Map <: FlatBuffers.Table
84 Base.propertynames(x::Map) = (:keysSorted,)
86 function Base.getproperty(x::Map, field::Symbol)
87 if field === :keysSorted
88 o = FlatBuffers.offset(x, 4)
89 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), Base.Bool)
94 mapStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 1)
95 mapAddKeysSorted(b::FlatBuffers.Builder, keyssorted::Base.Bool) = FlatBuffers.prependslot!(b, 0, keyssorted, 0)
96 mapEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
98 FlatBuffers.@scopedenum UnionMode::Int16 Sparse Dense
100 struct Union <: FlatBuffers.Table
105 Base.propertynames(x::Union) = (:mode, :typeIds)
107 function Base.getproperty(x::Union, field::Symbol)
109 o = FlatBuffers.offset(x, 4)
110 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), UnionMode)
111 return UnionMode.Sparse
112 elseif field === :typeIds
113 o = FlatBuffers.offset(x, 6)
114 o != 0 && return FlatBuffers.Array{Int32}(x, o)
119 unionStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 2)
120 unionAddMode(b::FlatBuffers.Builder, mode::UnionMode) = FlatBuffers.prependslot!(b, 0, mode, 0)
121 unionAddTypeIds(b::FlatBuffers.Builder, typeIds::FlatBuffers.UOffsetT) = FlatBuffers.prependoffsetslot!(b, 1, typeIds, 0)
122 unionStartTypeIdsVector(b::FlatBuffers.Builder, numelems) = FlatBuffers.startvector!(b, 4, numelems, 4)
123 unionEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
125 struct Int <: FlatBuffers.Table
130 Base.propertynames(x::Int) = (:bitWidth, :is_signed)
132 function Base.getproperty(x::Int, field::Symbol)
133 if field === :bitWidth
134 o = FlatBuffers.offset(x, 4)
135 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), Int32)
136 elseif field === :is_signed
137 o = FlatBuffers.offset(x, 6)
138 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), Base.Bool)
144 intStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 2)
145 intAddBitWidth(b::FlatBuffers.Builder, bitwidth::Int32) = FlatBuffers.prependslot!(b, 0, bitwidth, 0)
146 intAddIsSigned(b::FlatBuffers.Builder, issigned::Base.Bool) = FlatBuffers.prependslot!(b, 1, issigned, 0)
147 intEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
149 FlatBuffers.@scopedenum Precision::Int16 HALF SINGLE DOUBLE
151 struct FloatingPoint <: FlatBuffers.Table
156 Base.propertynames(x::FloatingPoint) = (:precision,)
158 function Base.getproperty(x::FloatingPoint, field::Symbol)
159 if field === :precision
160 o = FlatBuffers.offset(x, 4)
161 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), Precision)
162 return Precision.HALF
167 floatingPointStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 1)
168 floatingPointAddPrecision(b::FlatBuffers.Builder, precision::Precision) = FlatBuffers.prependslot!(b, 0, precision, 0)
169 floatingPointEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
171 struct Utf8 <: FlatBuffers.Table
176 Base.propertynames(x::Utf8) = ()
178 utf8Start(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 0)
179 utf8End(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
181 struct Binary <: FlatBuffers.Table
186 Base.propertynames(x::Binary) = ()
188 binaryStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 0)
189 binaryEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
191 struct LargeUtf8 <: FlatBuffers.Table
196 Base.propertynames(x::LargeUtf8) = ()
198 largUtf8Start(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 0)
199 largUtf8End(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
201 struct LargeBinary <: FlatBuffers.Table
206 Base.propertynames(x::LargeBinary) = ()
208 largeBinaryStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 0)
209 largeBinaryEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
211 struct FixedSizeBinary <: FlatBuffers.Table
216 Base.propertynames(x::FixedSizeBinary) = (:byteWidth,)
218 function Base.getproperty(x::FixedSizeBinary, field::Symbol)
219 if field === :byteWidth
220 o = FlatBuffers.offset(x, 4)
221 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), Int32)
226 fixedSizeBinaryStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 1)
227 fixedSizeBinaryAddByteWidth(b::FlatBuffers.Builder, bytewidth::Int32) = FlatBuffers.prependslot!(b, 0, bytewidth, 0)
228 fixedSizeBinaryEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
230 struct Bool <: FlatBuffers.Table
235 Base.propertynames(x::Bool) = ()
237 boolStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 0)
238 boolEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
240 struct Decimal <: FlatBuffers.Table
245 Base.propertynames(x::Decimal) = (:precision, :scale, :bitWidth)
247 function Base.getproperty(x::Decimal, field::Symbol)
248 if field === :precision
249 o = FlatBuffers.offset(x, 4)
250 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), Int32)
252 elseif field === :scale
253 o = FlatBuffers.offset(x, 6)
254 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), Int32)
256 elseif field === :bitWidth
257 o = FlatBuffers.offset(x, 8)
258 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), Int32)
264 decimalStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 3)
265 decimalAddPrecision(b::FlatBuffers.Builder, precision::Int32) = FlatBuffers.prependslot!(b, 0, precision, 0)
266 decimalAddScale(b::FlatBuffers.Builder, scale::Int32) = FlatBuffers.prependslot!(b, 1, scale, 0)
267 decimalAddBitWidth(b::FlatBuffers.Builder, bitWidth::Int32) = FlatBuffers.prependslot!(b, 2, bitWidth, Int32(128))
268 decimalEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
270 FlatBuffers.@scopedenum DateUnit::Int16 DAY MILLISECOND
272 struct Date <: FlatBuffers.Table
277 Base.propertynames(x::Date) = (:unit,)
279 function Base.getproperty(x::Date, field::Symbol)
281 o = FlatBuffers.offset(x, 4)
282 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), DateUnit)
283 return DateUnit.MILLISECOND
288 dateStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 1)
289 dateAddUnit(b::FlatBuffers.Builder, unit::DateUnit) = FlatBuffers.prependslot!(b, 0, unit, 1)
290 dateEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
292 FlatBuffers.@scopedenum TimeUnit::Int16 SECOND MILLISECOND MICROSECOND NANOSECOND
294 struct Time <: FlatBuffers.Table
299 Base.propertynames(x::Time) = (:unit, :bitWidth)
301 function Base.getproperty(x::Time, field::Symbol)
303 o = FlatBuffers.offset(x, 4)
304 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), TimeUnit)
305 return TimeUnit.MILLISECOND
306 elseif field === :bitWidth
307 o = FlatBuffers.offset(x, 6)
308 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), Int32)
314 timeStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 2)
315 timeAddUnit(b::FlatBuffers.Builder, unit::TimeUnit) = FlatBuffers.prependslot!(b, 0, unit, 1)
316 timeAddBitWidth(b::FlatBuffers.Builder, bitwidth::Int32) = FlatBuffers.prependslot!(b, 1, bitwidth, 32)
317 timeEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
319 struct Timestamp <: FlatBuffers.Table
324 Base.propertynames(x::Timestamp) = (:unit, :timezone)
326 function Base.getproperty(x::Timestamp, field::Symbol)
328 o = FlatBuffers.offset(x, 4)
329 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), TimeUnit)
330 return TimeUnit.SECOND
331 elseif field === :timezone
332 o = FlatBuffers.offset(x, 6)
333 o != 0 && return String(x, o + FlatBuffers.pos(x))
338 timestampStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 2)
339 timestampAddUnit(b::FlatBuffers.Builder, unit::TimeUnit) = FlatBuffers.prependslot!(b, 0, unit, 0)
340 timestampAddTimezone(b::FlatBuffers.Builder, timezone::FlatBuffers.UOffsetT) = FlatBuffers.prependoffsetslot!(b, 1, timezone, 0)
341 timestampEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
343 FlatBuffers.@scopedenum IntervalUnit::Int16 YEAR_MONTH DAY_TIME
345 struct Interval <: FlatBuffers.Table
350 Base.propertynames(x::Interval) = (:unit,)
352 function Base.getproperty(x::Interval, field::Symbol)
354 o = FlatBuffers.offset(x, 4)
355 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), IntervalUnit)
356 return IntervalUnit.YEAR_MONTH
361 intervalStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 1)
362 intervalAddUnit(b::FlatBuffers.Builder, unit::IntervalUnit) = FlatBuffers.prependslot!(b, 0, unit, 0)
363 intervalEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
365 struct Duration <: FlatBuffers.Table
370 Base.propertynames(x::Duration) = (:unit,)
372 function Base.getproperty(x::Duration, field::Symbol)
374 o = FlatBuffers.offset(x, 4)
375 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), TimeUnit)
376 return TimeUnit.MILLISECOND
381 durationStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 1)
382 durationAddUnit(b::FlatBuffers.Builder, unit::TimeUnit) = FlatBuffers.prependslot!(b, 0, unit, 1)
383 durationEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
385 function Type(b::UInt8)
386 b == 1 && return Null
388 b == 3 && return FloatingPoint
389 b == 4 && return Binary
390 b == 5 && return Utf8
391 b == 6 && return Bool
392 b == 7 && return Decimal
393 b == 8 && return Date
394 b == 9 && return Time
395 b == 10 && return Timestamp
396 b == 11 && return Interval
397 b == 12 && return List
398 b == 13 && return Struct
399 b == 14 && return Union
400 b == 15 && return FixedSizeBinary
401 b == 16 && return FixedSizeList
402 b == 17 && return Map
403 b == 18 && return Duration
404 b == 19 && return LargeBinary
405 b == 20 && return LargeUtf8
406 b == 21 && return LargeList
410 function Type(::Base.Type{T})::Int16 where {T}
411 T == Null && return 1
413 T == FloatingPoint && return 3
414 T == Binary && return 4
415 T == Utf8 && return 5
416 T == Bool && return 6
417 T == Decimal && return 7
418 T == Date && return 8
419 T == Time && return 9
420 T == Timestamp && return 10
421 T == Interval && return 11
422 T == List && return 12
423 T == Struct && return 13
424 T == Union && return 14
425 T == FixedSizeBinary && return 15
426 T == FixedSizeList && return 16
427 T == Map && return 17
428 T == Duration && return 18
429 T == LargeBinary && return 19
430 T == LargeUtf8 && return 20
431 T == LargeList && return 21
435 struct KeyValue <: FlatBuffers.Table
440 Base.propertynames(x::KeyValue) = (:key, :value)
442 function Base.getproperty(x::KeyValue, field::Symbol)
444 o = FlatBuffers.offset(x, 4)
445 o != 0 && return String(x, o + FlatBuffers.pos(x))
446 elseif field === :value
447 o = FlatBuffers.offset(x, 6)
448 o != 0 && return String(x, o + FlatBuffers.pos(x))
453 keyValueStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 2)
454 keyValueAddKey(b::FlatBuffers.Builder, key::FlatBuffers.UOffsetT) = FlatBuffers.prependoffsetslot!(b, 0, key, 0)
455 keyValueAddValue(b::FlatBuffers.Builder, value::FlatBuffers.UOffsetT) = FlatBuffers.prependoffsetslot!(b, 1, value, 0)
456 keyValueEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
458 FlatBuffers.@scopedenum DictionaryKind::Int16 DenseArray
460 struct DictionaryEncoding <: FlatBuffers.Table
465 Base.propertynames(x::DictionaryEncoding) = (:id, :indexType, :isOrdered, :dictionaryKind)
467 function Base.getproperty(x::DictionaryEncoding, field::Symbol)
469 o = FlatBuffers.offset(x, 4)
470 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), Int64)
472 elseif field === :indexType
473 o = FlatBuffers.offset(x, 6)
475 y = FlatBuffers.indirect(x, o + FlatBuffers.pos(x))
476 return FlatBuffers.init(Int, FlatBuffers.bytes(x), y)
478 elseif field === :isOrdered
479 o = FlatBuffers.offset(x, 8)
480 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), Base.Bool)
482 elseif field === :dictionaryKind
483 o = FlatBuffers.offset(x, 10)
484 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), DictionaryKind)
489 dictionaryEncodingStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 3)
490 dictionaryEncodingAddId(b::FlatBuffers.Builder, id::Int64) = FlatBuffers.prependslot!(b, 0, id, 0)
491 dictionaryEncodingAddIndexType(b::FlatBuffers.Builder, indextype::FlatBuffers.UOffsetT) = FlatBuffers.prependoffsetslot!(b, 1, indextype, 0)
492 dictionaryEncodingAddIsOrdered(b::FlatBuffers.Builder, isordered::Base.Bool) = FlatBuffers.prependslot!(b, 1, isordered, 0)
493 dictionaryEncodingEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
495 struct Field <: FlatBuffers.Table
500 Base.propertynames(x::Field) = (:name, :nullable, :type, :dictionary, :children, :custom_metadata)
502 function Base.getproperty(x::Field, field::Symbol)
504 o = FlatBuffers.offset(x, 4)
505 o != 0 && return String(x, o + FlatBuffers.pos(x))
506 elseif field === :nullable
507 o = FlatBuffers.offset(x, 6)
508 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), Base.Bool)
510 elseif field === :type
511 o = FlatBuffers.offset(x, 8)
513 T = Type(FlatBuffers.get(x, o + FlatBuffers.pos(x), UInt8))
514 o = FlatBuffers.offset(x, 10)
515 pos = FlatBuffers.union(x, o)
517 return FlatBuffers.init(T, FlatBuffers.bytes(x), pos)
520 elseif field === :dictionary
521 o = FlatBuffers.offset(x, 12)
523 y = FlatBuffers.indirect(x, o + FlatBuffers.pos(x))
524 return FlatBuffers.init(DictionaryEncoding, FlatBuffers.bytes(x), y)
526 elseif field === :children
527 o = FlatBuffers.offset(x, 14)
529 return FlatBuffers.Array{Field}(x, o)
531 elseif field === :custom_metadata
532 o = FlatBuffers.offset(x, 16)
534 return FlatBuffers.Array{KeyValue}(x, o)
540 fieldStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 7)
541 fieldAddName(b::FlatBuffers.Builder, name::FlatBuffers.UOffsetT) = FlatBuffers.prependoffsetslot!(b, 0, name, 0)
542 fieldAddNullable(b::FlatBuffers.Builder, nullable::Base.Bool) = FlatBuffers.prependslot!(b, 1, nullable, false)
543 fieldAddTypeType(b::FlatBuffers.Builder, ::Core.Type{T}) where {T} = FlatBuffers.prependslot!(b, 2, Type(T), 0)
544 fieldAddType(b::FlatBuffers.Builder, type::FlatBuffers.UOffsetT) = FlatBuffers.prependoffsetslot!(b, 3, type, 0)
545 fieldAddDictionary(b::FlatBuffers.Builder, dictionary::FlatBuffers.UOffsetT) = FlatBuffers.prependoffsetslot!(b, 4, dictionary, 0)
546 fieldAddChildren(b::FlatBuffers.Builder, children::FlatBuffers.UOffsetT) = FlatBuffers.prependoffsetslot!(b, 5, children, 0)
547 fieldStartChildrenVector(b::FlatBuffers.Builder, numelems) = FlatBuffers.startvector!(b, 4, numelems, 4)
548 fieldAddCustomMetadata(b::FlatBuffers.Builder, custommetadata::FlatBuffers.UOffsetT) = FlatBuffers.prependoffsetslot!(b, 6, custommetadata, 0)
549 fieldStartCustomMetadataVector(b::FlatBuffers.Builder, numelems) = FlatBuffers.startvector!(b, 4, numelems, 4)
550 fieldEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)
552 FlatBuffers.@scopedenum Endianness::Int16 Little Big
554 struct Buffer <: FlatBuffers.Struct
559 FlatBuffers.structsizeof(::Base.Type{Buffer}) = 16
561 Base.propertynames(x::Buffer) = (:offset, :length)
563 function Base.getproperty(x::Buffer, field::Symbol)
565 return FlatBuffers.get(x, FlatBuffers.pos(x), Int64)
566 elseif field === :length
567 return FlatBuffers.get(x, FlatBuffers.pos(x) + 8, Int64)
572 function createBuffer(b::FlatBuffers.Builder, offset::Int64, length::Int64)
573 FlatBuffers.prep!(b, 8, 16)
576 return FlatBuffers.offset(b)
579 struct Schema <: FlatBuffers.Table
584 Base.propertynames(x::Schema) = (:endianness, :fields, :custom_metadata)
586 function Base.getproperty(x::Schema, field::Symbol)
587 if field === :endianness
588 o = FlatBuffers.offset(x, 4)
589 o != 0 && return FlatBuffers.get(x, o + FlatBuffers.pos(x), Endianness)
590 elseif field === :fields
591 o = FlatBuffers.offset(x, 6)
593 return FlatBuffers.Array{Field}(x, o)
595 elseif field === :custom_metadata
596 o = FlatBuffers.offset(x, 8)
598 return FlatBuffers.Array{KeyValue}(x, o)
604 schemaStart(b::FlatBuffers.Builder) = FlatBuffers.startobject!(b, 3)
605 schemaAddEndianness(b::FlatBuffers.Builder, endianness::Endianness) = FlatBuffers.prependslot!(b, 0, endianness, 0)
606 schemaAddFields(b::FlatBuffers.Builder, fields::FlatBuffers.UOffsetT) = FlatBuffers.prependoffsetslot!(b, 1, fields, 0)
607 schemaStartFieldsVector(b::FlatBuffers.Builder, numelems) = FlatBuffers.startvector!(b, 4, numelems, 4)
608 schemaAddCustomMetadata(b::FlatBuffers.Builder, custommetadata::FlatBuffers.UOffsetT) = FlatBuffers.prependoffsetslot!(b, 2, custommetadata, 0)
609 schemaStartCustomMetadataVector(b::FlatBuffers.Builder, numelems) = FlatBuffers.startvector!(b, 4, numelems, 4)
610 schemaEnd(b::FlatBuffers.Builder) = FlatBuffers.endobject!(b)