From 3e9ac3cff93d476d95a4aa79ff59097ed6097326 Mon Sep 17 00:00:00 2001 From: mustiikhalil Date: Mon, 16 Mar 2020 21:55:59 +0300 Subject: [PATCH] [Scripts] Adds swift to generated code (#5806) * Moved swifttest.sh code generator to generate_code + fix issue in ghpages * Fixes small issue with cocoapods documentation --- docs/source/doxygen_layout.xml | 2 + swift/README.md | 2 +- tests/generate_code.sh | 13 ++++- tests/monster_test.grpc.swift | 97 ++++++++++++++++++++++++++++++++++ 4 files changed, 111 insertions(+), 3 deletions(-) create mode 100644 tests/monster_test.grpc.swift 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; + } + } + +} + +