diff --git a/docs/source/doxygen_layout.xml b/docs/source/doxygen_layout.xml
index 72888f951..e1a6b81dc 100644
--- a/docs/source/doxygen_layout.xml
+++ b/docs/source/doxygen_layout.xml
@@ -49,6 +49,8 @@
title="Use in Lobster"/>
+
diff --git a/swift/README.md b/swift/README.md
index 656223dc0..cc7efdec4 100644
--- a/swift/README.md
+++ b/swift/README.md
@@ -4,7 +4,7 @@ FlatBuffers swift can be found in both SPM
and Cocoapods
-`pod 'FlatBuffers', :git => 'https://github.com/mustiikhalil/flatbuffers.git' :branch => 'swift'`
+`pod 'FlatBuffers', :git => 'https://github.com/mustiikhalil/flatbuffers.git', :branch => 'swift'`
To report any error please use the main repository.
diff --git a/tests/generate_code.sh b/tests/generate_code.sh
index e97334f0f..9098096b0 100755
--- a/tests/generate_code.sh
+++ b/tests/generate_code.sh
@@ -30,7 +30,7 @@ TEST_BASE_FLAGS="--reflect-names --gen-mutable --gen-object-api"
TEST_RUST_FLAGS="$TEST_BASE_FLAGS --gen-name-strings"
TEST_NOINCL_FLAGS="$TEST_BASE_FLAGS --no-includes --no-fb-import"
-../flatc --binary --cpp --java --kotlin --csharp --dart --go --lobster --lua --js --ts --php --grpc \
+../flatc --binary --cpp --java --kotlin --csharp --dart --go --lobster --lua --js --ts --php --swift --grpc \
$TEST_NOINCL_FLAGS $TEST_CPP_FLAGS $TEST_CS_FLAGS -I include_test monster_test.fbs monsterdata_test.json
../flatc --rust $TEST_RUST_FLAGS -I include_test monster_test.fbs monsterdata_test.json
@@ -39,7 +39,7 @@ $TEST_NOINCL_FLAGS $TEST_CPP_FLAGS $TEST_CS_FLAGS -I include_test monster_test.f
../flatc --cpp --java --kotlin --csharp --dart --go --binary --lobster --lua --js --ts --php --python --rust \
$TEST_NOINCL_FLAGS $TEST_CPP_FLAGS $TEST_CS_FLAGS -o namespace_test namespace_test/namespace_test1.fbs namespace_test/namespace_test2.fbs
-../flatc --cpp --java --kotlin --csharp --js --ts --php $TEST_BASE_FLAGS $TEST_CPP_FLAGS $TEST_CS_FLAGS -o union_vector ./union_vector/union_vector.fbs
+../flatc --cpp --java --kotlin --csharp --js --ts --php --swift $TEST_BASE_FLAGS $TEST_CPP_FLAGS $TEST_CS_FLAGS -o union_vector ./union_vector/union_vector.fbs
../flatc --rust -I include_test -o include_test include_test/include_test1.fbs
../flatc --rust -I include_test -o include_test/sub include_test/sub/include_test2.fbs
../flatc -b --schema --bfbs-comments --bfbs-builtins -I include_test monster_test.fbs
@@ -51,6 +51,15 @@ $TEST_NOINCL_FLAGS $TEST_CPP_FLAGS $TEST_CS_FLAGS -o namespace_test namespace_te
../flatc --python $TEST_BASE_FLAGS arrays_test.fbs
../flatc --dart monster_extra.fbs
+# Moves the swift generated code into the swift directory
+mv *generated.swift FlatBuffers.Test.Swift/Tests/FlatBuffers.Test.SwiftTests
+mv ./union_vector/*_generated.swift FlatBuffers.Test.Swift/Tests/FlatBuffers.Test.SwiftTests
+
+working_dir=`pwd`
+cd FlatBuffers.GRPC.Swift/Sources/Model
+$working_dir/../flatc --swift --grpc greeter.fbs
+cd $working_dir
+
# Tests if the --filename-suffix and --filename-ext works and produces the same
# outputs.
../flatc --cpp --filename-suffix _suffix --filename-ext hpp $TEST_NOINCL_FLAGS $TEST_CPP_FLAGS -I include_test monster_test.fbs
diff --git a/tests/monster_test.grpc.swift b/tests/monster_test.grpc.swift
new file mode 100644
index 000000000..572c0d356
--- /dev/null
+++ b/tests/monster_test.grpc.swift
@@ -0,0 +1,97 @@
+// Generated GRPC code for FlatBuffers swift!
+/// The following code is generated by the Flatbuffers library which might not be in sync with grpc-swift
+/// in case of an issue please open github issue, though it would be maintained
+import Foundation
+import GRPC
+import NIO
+import NIOHTTP1
+import FlatBuffers
+
+public protocol GRPCFlatBufPayload: GRPCPayload, FlatBufferGRPCMessage {}
+public extension GRPCFlatBufPayload {
+ init(serializedByteBuffer: inout NIO.ByteBuffer) throws {
+ self.init(byteBuffer: FlatBuffers.ByteBuffer(contiguousBytes: serializedByteBuffer.readableBytesView, count: serializedByteBuffer.readableBytes))
+ }
+ func serialize(into buffer: inout NIO.ByteBuffer) throws {
+ let buf = UnsafeRawBufferPointer(start: self.rawPointer, count: Int(self.size))
+ buffer.writeBytes(buf)
+ }
+}
+extension Message: GRPCFlatBufPayload {}
+
+/// Usage: instantiate MonsterStorageServiceClient, then call methods of this protocol to make API calls.
+public protocol MonsterStorageService {
+ func Store(_ request: Message, callOptions: CallOptions?) -> UnaryCall,Message>
+ func Retrieve(_ request: Message, callOptions: CallOptions?, handler: @escaping (Message) -> Void) -> ServerStreamingCall, Message>
+ func GetMaxHitPoint(callOptions: CallOptions?) -> ClientStreamingCall,Message>
+ func GetMinMaxHitPoints(callOptions: CallOptions?, handler: @escaping (Message) -> Void) -> BidirectionalStreamingCall, Message>
+}
+
+public final class MonsterStorageServiceClient: GRPCClient, MonsterStorageService {
+ public let connection: ClientConnection
+ public var defaultCallOptions: CallOptions
+
+ public init(connection: ClientConnection, defaultCallOptions: CallOptions = CallOptions()) {
+ self.connection = connection
+ self.defaultCallOptions = defaultCallOptions
+ }
+
+ public func Store(_ request: Message, callOptions: CallOptions? = nil) -> UnaryCall,Message> {
+ return self.makeUnaryCall(path: "/MyGame.Example.MonsterStorage/Store", request: request, callOptions: callOptions ?? self.defaultCallOptions)
+ }
+
+ public func Retrieve(_ request: Message, callOptions: CallOptions? = nil, handler: @escaping (Message) -> Void) -> ServerStreamingCall, Message> {
+ return self.makeServerStreamingCall(path: "/MyGame.Example.MonsterStorage/Retrieve", request: request, callOptions: callOptions ?? self.defaultCallOptions, handler: handler)
+ }
+
+ public func GetMaxHitPoint(callOptions: CallOptions? = nil) -> ClientStreamingCall,Message> {
+ return self.makeClientStreamingCall(path: "/MyGame.Example.MonsterStorage/GetMaxHitPoint", callOptions: callOptions ?? self.defaultCallOptions)
+ }
+
+ public func GetMinMaxHitPoints(callOptions: CallOptions? = nil, handler: @escaping (Message) -> Void) -> BidirectionalStreamingCall, Message> {
+ return self.makeBidirectionalStreamingCall(path: "/MyGame.Example.MonsterStorage/GetMinMaxHitPoints", callOptions: callOptions ?? self.defaultCallOptions, handler: handler)
+ }
+}
+
+public protocol MonsterStorageProvider: CallHandlerProvider {
+ func Store(_ request: Message, context: StatusOnlyCallContext) -> EventLoopFuture>
+ func Retrieve(request: Message, context: StreamingResponseCallContext>) -> EventLoopFuture
+ func GetMaxHitPoint(context: UnaryResponseCallContext>) -> EventLoopFuture<(StreamEvent>) -> Void>
+ func GetMinMaxHitPoints(context: StreamingResponseCallContext>) -> EventLoopFuture<(StreamEvent>) -> Void>
+}
+
+public extension MonsterStorageProvider {
+ var serviceName: String { return "MyGame.Example.MonsterStorage" }
+ func handleMethod(_ methodName: String, callHandlerContext: CallHandlerContext) -> GRPCCallHandler? {
+ switch methodName {
+ case "Store":
+ return UnaryCallHandler(callHandlerContext: callHandlerContext) { context in
+ return { request in
+ self.Store(request, context: context)
+ }
+ }
+ case "Retrieve":
+ return ServerStreamingCallHandler(callHandlerContext: callHandlerContext) { context in
+ return { request in
+ self.Retrieve(request: request, context: context)
+ }
+ }
+ case "GetMaxHitPoint":
+ return ClientStreamingCallHandler(callHandlerContext: callHandlerContext) { context in
+ return { request in
+ self.GetMaxHitPoint(request: request, context: context)
+ }
+ }
+ case "GetMinMaxHitPoints":
+ return BidirectionalStreamingCallHandler(callHandlerContext: callHandlerContext) { context in
+ return { request in
+ self.GetMinMaxHitPoints(request: request, context: context)
+ }
+ }
+ default: return nil;
+ }
+ }
+
+}
+
+