CallHandlerFactory.swift 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * Copyright 2020, gRPC Authors 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. import NIO
  17. import SwiftProtobuf
  18. // We can't use a 'where' clause on 'init's to constrain the generic requirements of a type. Instead
  19. // we'll use static methods on this factory.
  20. public enum CallHandlerFactory {
  21. public typealias UnaryContext<Response> = UnaryResponseCallContext<Response>
  22. public typealias UnaryEventObserver<Request, Response> = (Request) -> EventLoopFuture<Response>
  23. public static func makeUnary<Request: Message, Response: Message>(
  24. callHandlerContext: CallHandlerContext,
  25. eventObserverFactory: @escaping (UnaryContext<Response>) -> UnaryEventObserver<Request, Response>
  26. ) -> UnaryCallHandler<Request, Response> {
  27. return UnaryCallHandler(
  28. serializer: ProtobufSerializer(),
  29. deserializer: ProtobufDeserializer(),
  30. callHandlerContext: callHandlerContext,
  31. eventObserverFactory: eventObserverFactory
  32. )
  33. }
  34. public typealias ClientStreamingContext<Response> = UnaryResponseCallContext<Response>
  35. public typealias ClientStreamingEventObserver<Request> = EventLoopFuture<(StreamEvent<Request>) -> Void>
  36. public static func makeClientStreaming<Request: Message, Response: Message>(
  37. callHandlerContext: CallHandlerContext,
  38. eventObserverFactory: @escaping (ClientStreamingContext<Response>) -> ClientStreamingEventObserver<Request>
  39. ) -> ClientStreamingCallHandler<Request, Response> {
  40. return ClientStreamingCallHandler(
  41. serializer: ProtobufSerializer(),
  42. deserializer: ProtobufDeserializer(),
  43. callHandlerContext: callHandlerContext,
  44. eventObserverFactory: eventObserverFactory
  45. )
  46. }
  47. public typealias ServerStreamingContext<Response> = StreamingResponseCallContext<Response>
  48. public typealias ServerStreamingEventObserver<Request> = (Request) -> EventLoopFuture<GRPCStatus>
  49. public static func makeServerStreaming<Request: Message, Response: Message>(
  50. callHandlerContext: CallHandlerContext,
  51. eventObserverFactory: @escaping (ServerStreamingContext<Response>) -> ServerStreamingEventObserver<Request>
  52. ) -> ServerStreamingCallHandler<Request, Response> {
  53. return ServerStreamingCallHandler(
  54. serializer: ProtobufSerializer(),
  55. deserializer: ProtobufDeserializer(),
  56. callHandlerContext: callHandlerContext,
  57. eventObserverFactory: eventObserverFactory
  58. )
  59. }
  60. public typealias BidirectionalStreamingContext<Response> = StreamingResponseCallContext<Response>
  61. public typealias BidirectionalStreamingEventObserver<Request> = EventLoopFuture<(StreamEvent<Request>) -> Void>
  62. public static func makeBidirectionalStreaming<Request: Message, Response: Message>(
  63. callHandlerContext: CallHandlerContext,
  64. eventObserverFactory: @escaping (BidirectionalStreamingContext<Response>) -> BidirectionalStreamingEventObserver<Request>
  65. ) -> BidirectionalStreamingCallHandler<Request, Response> {
  66. return BidirectionalStreamingCallHandler(
  67. serializer: ProtobufSerializer(),
  68. deserializer: ProtobufDeserializer(),
  69. callHandlerContext: callHandlerContext,
  70. eventObserverFactory: eventObserverFactory
  71. )
  72. }
  73. }