• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2024 Google Inc. All rights reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 import Foundation
18 
19 /// NativeStruct is a protocol that indicates if the struct is a native `swift` struct
20 /// since now we will be serializing native structs into the buffer.
21 public protocol NativeStruct {}
22 
23 /// FlatbuffersInitializable is a protocol that allows any object to be
24 /// Initialized from a ByteBuffer
25 public protocol FlatbuffersInitializable {
26   /// Any flatbuffers object that confirms to this protocol is going to be
27   /// initializable through this initializer
28   init(_ bb: ByteBuffer, o: Int32)
29 }
30 
31 /// FlatbufferObject structures all the Flatbuffers objects
32 public protocol FlatBufferObject: FlatbuffersInitializable {
33   var __buffer: ByteBuffer! { get }
34 }
35 
36 /// ``ObjectAPIPacker`` is a protocol that allows object to pack and unpack from a
37 /// ``NativeObject`` to a flatbuffers Object and vice versa.
38 public protocol ObjectAPIPacker {
39   /// associatedtype to the object that should be unpacked.
40   associatedtype T
41 
42   /// ``pack(_:obj:)-3ptws`` tries to pacs the variables of a native Object into the `ByteBuffer` by using
43   /// a FlatBufferBuilder
44   /// - Parameters:
45   ///   - builder: FlatBufferBuilder that will host incoming data
46   ///   - obj: Object of associatedtype to the current implementer
47   ///
48   /// ``pack(_:obj:)-3ptws`` can be called by passing through an already initialized ``FlatBufferBuilder``
49   /// or it can be called by using the public API that will create a new ``FlatBufferBuilder``
packnull50   static func pack(_ builder: inout FlatBufferBuilder, obj: inout T?) -> Offset
51 
52   /// ``pack(_:obj:)-20ipk`` packs the variables of a native Object into the `ByteBuffer` by using
53   /// the FlatBufferBuilder
54   /// - Parameters:
55   ///   - builder: FlatBufferBuilder that will host incoming data
56   ///   - obj: Object of associatedtype to the current implementer
57   ///
58   /// ``pack(_:obj:)-20ipk`` can be called by passing through an already initialized ``FlatBufferBuilder``
59   /// or it can be called by using the public API that will create a new ``FlatBufferBuilder``
60   static func pack(_ builder: inout FlatBufferBuilder, obj: inout T) -> Offset
61 
62   /// ``unpack()`` unpacks a ``FlatBuffers`` object into a Native swift object.
63   mutating func unpack() -> T
64 }
65