damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

NativeObject.swift (2138B)


      1 /*
      2  * Copyright 2023 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 #if !os(WASI)
     18 import Foundation
     19 #else
     20 import SwiftOverlayShims
     21 #endif
     22 
     23 /// NativeObject is a protocol that all of the `Object-API` generated code should be
     24 /// conforming to since it allows developers the ease of use to pack and unpack their
     25 /// Flatbuffers objects
     26 public protocol NativeObject {}
     27 
     28 extension NativeObject {
     29 
     30   /// Serialize is a helper function that serailizes the data from the Object API to a bytebuffer directly th
     31   /// - Parameter type: Type of the Flatbuffer object
     32   /// - Returns: returns the encoded sized ByteBuffer
     33   public func serialize<T: ObjectAPIPacker>(type: T.Type) -> ByteBuffer
     34     where T.T == Self
     35   {
     36     var builder = FlatBufferBuilder(initialSize: 1024)
     37     return serialize(builder: &builder, type: type.self)
     38   }
     39 
     40   /// Serialize is a helper function that serailizes the data from the Object API to a bytebuffer directly.
     41   ///
     42   /// - Parameters:
     43   ///   - builder: A FlatBufferBuilder
     44   ///   - type: Type of the Flatbuffer object
     45   /// - Returns: returns the encoded sized ByteBuffer
     46   /// - Note: The `serialize(builder:type)` can be considered as a function that allows you to create smaller builder instead of the default `1024`.
     47   ///  It can be considered less expensive in terms of memory allocation
     48   public func serialize<T: ObjectAPIPacker>(
     49     builder: inout FlatBufferBuilder,
     50     type: T.Type) -> ByteBuffer where T.T == Self
     51   {
     52     var s = self
     53     let root = type.pack(&builder, obj: &s)
     54     builder.finish(offset: root)
     55     return builder.sizedBuffer
     56   }
     57 }