grpc_testing_benchmark_service.grpc.swift 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451
  1. // Copyright 2015 gRPC authors.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. /// An integration test service that covers all the method signature permutations
  15. /// of unary/streaming requests/responses.
  16. // DO NOT EDIT.
  17. // swift-format-ignore-file
  18. //
  19. // Generated by the gRPC Swift generator plugin for the protocol buffer compiler.
  20. // Source: grpc/testing/benchmark_service.proto
  21. //
  22. // For information on using the generated types, please see the documentation:
  23. // https://github.com/grpc/grpc-swift
  24. import GRPCCore
  25. import GRPCProtobuf
  26. internal enum Grpc_Testing_BenchmarkService {
  27. internal static let descriptor = ServiceDescriptor.grpc_testing_BenchmarkService
  28. internal enum Method {
  29. internal enum UnaryCall {
  30. internal typealias Input = Grpc_Testing_SimpleRequest
  31. internal typealias Output = Grpc_Testing_SimpleResponse
  32. internal static let descriptor = MethodDescriptor(
  33. service: Grpc_Testing_BenchmarkService.descriptor.fullyQualifiedService,
  34. method: "UnaryCall"
  35. )
  36. }
  37. internal enum StreamingCall {
  38. internal typealias Input = Grpc_Testing_SimpleRequest
  39. internal typealias Output = Grpc_Testing_SimpleResponse
  40. internal static let descriptor = MethodDescriptor(
  41. service: Grpc_Testing_BenchmarkService.descriptor.fullyQualifiedService,
  42. method: "StreamingCall"
  43. )
  44. }
  45. internal enum StreamingFromClient {
  46. internal typealias Input = Grpc_Testing_SimpleRequest
  47. internal typealias Output = Grpc_Testing_SimpleResponse
  48. internal static let descriptor = MethodDescriptor(
  49. service: Grpc_Testing_BenchmarkService.descriptor.fullyQualifiedService,
  50. method: "StreamingFromClient"
  51. )
  52. }
  53. internal enum StreamingFromServer {
  54. internal typealias Input = Grpc_Testing_SimpleRequest
  55. internal typealias Output = Grpc_Testing_SimpleResponse
  56. internal static let descriptor = MethodDescriptor(
  57. service: Grpc_Testing_BenchmarkService.descriptor.fullyQualifiedService,
  58. method: "StreamingFromServer"
  59. )
  60. }
  61. internal enum StreamingBothWays {
  62. internal typealias Input = Grpc_Testing_SimpleRequest
  63. internal typealias Output = Grpc_Testing_SimpleResponse
  64. internal static let descriptor = MethodDescriptor(
  65. service: Grpc_Testing_BenchmarkService.descriptor.fullyQualifiedService,
  66. method: "StreamingBothWays"
  67. )
  68. }
  69. internal static let descriptors: [MethodDescriptor] = [
  70. UnaryCall.descriptor,
  71. StreamingCall.descriptor,
  72. StreamingFromClient.descriptor,
  73. StreamingFromServer.descriptor,
  74. StreamingBothWays.descriptor
  75. ]
  76. }
  77. @available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
  78. internal typealias StreamingServiceProtocol = Grpc_Testing_BenchmarkServiceStreamingServiceProtocol
  79. @available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
  80. internal typealias ServiceProtocol = Grpc_Testing_BenchmarkServiceServiceProtocol
  81. @available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
  82. internal typealias ClientProtocol = Grpc_Testing_BenchmarkServiceClientProtocol
  83. @available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
  84. internal typealias Client = Grpc_Testing_BenchmarkServiceClient
  85. }
  86. extension ServiceDescriptor {
  87. internal static let grpc_testing_BenchmarkService = Self(
  88. package: "grpc.testing",
  89. service: "BenchmarkService"
  90. )
  91. }
  92. @available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
  93. internal protocol Grpc_Testing_BenchmarkServiceStreamingServiceProtocol: GRPCCore.RegistrableRPCService {
  94. /// One request followed by one response.
  95. /// The server returns the client payload as-is.
  96. func unaryCall(request: ServerRequest.Stream<Grpc_Testing_SimpleRequest>) async throws -> ServerResponse.Stream<Grpc_Testing_SimpleResponse>
  97. /// Repeated sequence of one request followed by one response.
  98. /// Should be called streaming ping-pong
  99. /// The server returns the client payload as-is on each response
  100. func streamingCall(request: ServerRequest.Stream<Grpc_Testing_SimpleRequest>) async throws -> ServerResponse.Stream<Grpc_Testing_SimpleResponse>
  101. /// Single-sided unbounded streaming from client to server
  102. /// The server returns the client payload as-is once the client does WritesDone
  103. func streamingFromClient(request: ServerRequest.Stream<Grpc_Testing_SimpleRequest>) async throws -> ServerResponse.Stream<Grpc_Testing_SimpleResponse>
  104. /// Single-sided unbounded streaming from server to client
  105. /// The server repeatedly returns the client payload as-is
  106. func streamingFromServer(request: ServerRequest.Stream<Grpc_Testing_SimpleRequest>) async throws -> ServerResponse.Stream<Grpc_Testing_SimpleResponse>
  107. /// Two-sided unbounded streaming between server to client
  108. /// Both sides send the content of their own choice to the other
  109. func streamingBothWays(request: ServerRequest.Stream<Grpc_Testing_SimpleRequest>) async throws -> ServerResponse.Stream<Grpc_Testing_SimpleResponse>
  110. }
  111. /// Conformance to `GRPCCore.RegistrableRPCService`.
  112. @available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
  113. extension Grpc_Testing_BenchmarkService.StreamingServiceProtocol {
  114. @available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
  115. internal func registerMethods(with router: inout GRPCCore.RPCRouter) {
  116. router.registerHandler(
  117. forMethod: Grpc_Testing_BenchmarkService.Method.UnaryCall.descriptor,
  118. deserializer: ProtobufDeserializer<Grpc_Testing_SimpleRequest>(),
  119. serializer: ProtobufSerializer<Grpc_Testing_SimpleResponse>(),
  120. handler: { request in
  121. try await self.unaryCall(request: request)
  122. }
  123. )
  124. router.registerHandler(
  125. forMethod: Grpc_Testing_BenchmarkService.Method.StreamingCall.descriptor,
  126. deserializer: ProtobufDeserializer<Grpc_Testing_SimpleRequest>(),
  127. serializer: ProtobufSerializer<Grpc_Testing_SimpleResponse>(),
  128. handler: { request in
  129. try await self.streamingCall(request: request)
  130. }
  131. )
  132. router.registerHandler(
  133. forMethod: Grpc_Testing_BenchmarkService.Method.StreamingFromClient.descriptor,
  134. deserializer: ProtobufDeserializer<Grpc_Testing_SimpleRequest>(),
  135. serializer: ProtobufSerializer<Grpc_Testing_SimpleResponse>(),
  136. handler: { request in
  137. try await self.streamingFromClient(request: request)
  138. }
  139. )
  140. router.registerHandler(
  141. forMethod: Grpc_Testing_BenchmarkService.Method.StreamingFromServer.descriptor,
  142. deserializer: ProtobufDeserializer<Grpc_Testing_SimpleRequest>(),
  143. serializer: ProtobufSerializer<Grpc_Testing_SimpleResponse>(),
  144. handler: { request in
  145. try await self.streamingFromServer(request: request)
  146. }
  147. )
  148. router.registerHandler(
  149. forMethod: Grpc_Testing_BenchmarkService.Method.StreamingBothWays.descriptor,
  150. deserializer: ProtobufDeserializer<Grpc_Testing_SimpleRequest>(),
  151. serializer: ProtobufSerializer<Grpc_Testing_SimpleResponse>(),
  152. handler: { request in
  153. try await self.streamingBothWays(request: request)
  154. }
  155. )
  156. }
  157. }
  158. @available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
  159. internal protocol Grpc_Testing_BenchmarkServiceServiceProtocol: Grpc_Testing_BenchmarkService.StreamingServiceProtocol {
  160. /// One request followed by one response.
  161. /// The server returns the client payload as-is.
  162. func unaryCall(request: ServerRequest.Single<Grpc_Testing_SimpleRequest>) async throws -> ServerResponse.Single<Grpc_Testing_SimpleResponse>
  163. /// Repeated sequence of one request followed by one response.
  164. /// Should be called streaming ping-pong
  165. /// The server returns the client payload as-is on each response
  166. func streamingCall(request: ServerRequest.Stream<Grpc_Testing_SimpleRequest>) async throws -> ServerResponse.Stream<Grpc_Testing_SimpleResponse>
  167. /// Single-sided unbounded streaming from client to server
  168. /// The server returns the client payload as-is once the client does WritesDone
  169. func streamingFromClient(request: ServerRequest.Stream<Grpc_Testing_SimpleRequest>) async throws -> ServerResponse.Single<Grpc_Testing_SimpleResponse>
  170. /// Single-sided unbounded streaming from server to client
  171. /// The server repeatedly returns the client payload as-is
  172. func streamingFromServer(request: ServerRequest.Single<Grpc_Testing_SimpleRequest>) async throws -> ServerResponse.Stream<Grpc_Testing_SimpleResponse>
  173. /// Two-sided unbounded streaming between server to client
  174. /// Both sides send the content of their own choice to the other
  175. func streamingBothWays(request: ServerRequest.Stream<Grpc_Testing_SimpleRequest>) async throws -> ServerResponse.Stream<Grpc_Testing_SimpleResponse>
  176. }
  177. /// Partial conformance to `Grpc_Testing_BenchmarkServiceStreamingServiceProtocol`.
  178. @available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
  179. extension Grpc_Testing_BenchmarkService.ServiceProtocol {
  180. internal func unaryCall(request: ServerRequest.Stream<Grpc_Testing_SimpleRequest>) async throws -> ServerResponse.Stream<Grpc_Testing_SimpleResponse> {
  181. let response = try await self.unaryCall(request: ServerRequest.Single(stream: request))
  182. return ServerResponse.Stream(single: response)
  183. }
  184. internal func streamingFromClient(request: ServerRequest.Stream<Grpc_Testing_SimpleRequest>) async throws -> ServerResponse.Stream<Grpc_Testing_SimpleResponse> {
  185. let response = try await self.streamingFromClient(request: request)
  186. return ServerResponse.Stream(single: response)
  187. }
  188. internal func streamingFromServer(request: ServerRequest.Stream<Grpc_Testing_SimpleRequest>) async throws -> ServerResponse.Stream<Grpc_Testing_SimpleResponse> {
  189. let response = try await self.streamingFromServer(request: ServerRequest.Single(stream: request))
  190. return response
  191. }
  192. }
  193. @available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
  194. internal protocol Grpc_Testing_BenchmarkServiceClientProtocol: Sendable {
  195. /// One request followed by one response.
  196. /// The server returns the client payload as-is.
  197. func unaryCall<R>(
  198. request: ClientRequest.Single<Grpc_Testing_SimpleRequest>,
  199. serializer: some MessageSerializer<Grpc_Testing_SimpleRequest>,
  200. deserializer: some MessageDeserializer<Grpc_Testing_SimpleResponse>,
  201. options: CallOptions,
  202. _ body: @Sendable @escaping (ClientResponse.Single<Grpc_Testing_SimpleResponse>) async throws -> R
  203. ) async throws -> R where R: Sendable
  204. /// Repeated sequence of one request followed by one response.
  205. /// Should be called streaming ping-pong
  206. /// The server returns the client payload as-is on each response
  207. func streamingCall<R>(
  208. request: ClientRequest.Stream<Grpc_Testing_SimpleRequest>,
  209. serializer: some MessageSerializer<Grpc_Testing_SimpleRequest>,
  210. deserializer: some MessageDeserializer<Grpc_Testing_SimpleResponse>,
  211. options: CallOptions,
  212. _ body: @Sendable @escaping (ClientResponse.Stream<Grpc_Testing_SimpleResponse>) async throws -> R
  213. ) async throws -> R where R: Sendable
  214. /// Single-sided unbounded streaming from client to server
  215. /// The server returns the client payload as-is once the client does WritesDone
  216. func streamingFromClient<R>(
  217. request: ClientRequest.Stream<Grpc_Testing_SimpleRequest>,
  218. serializer: some MessageSerializer<Grpc_Testing_SimpleRequest>,
  219. deserializer: some MessageDeserializer<Grpc_Testing_SimpleResponse>,
  220. options: CallOptions,
  221. _ body: @Sendable @escaping (ClientResponse.Single<Grpc_Testing_SimpleResponse>) async throws -> R
  222. ) async throws -> R where R: Sendable
  223. /// Single-sided unbounded streaming from server to client
  224. /// The server repeatedly returns the client payload as-is
  225. func streamingFromServer<R>(
  226. request: ClientRequest.Single<Grpc_Testing_SimpleRequest>,
  227. serializer: some MessageSerializer<Grpc_Testing_SimpleRequest>,
  228. deserializer: some MessageDeserializer<Grpc_Testing_SimpleResponse>,
  229. options: CallOptions,
  230. _ body: @Sendable @escaping (ClientResponse.Stream<Grpc_Testing_SimpleResponse>) async throws -> R
  231. ) async throws -> R where R: Sendable
  232. /// Two-sided unbounded streaming between server to client
  233. /// Both sides send the content of their own choice to the other
  234. func streamingBothWays<R>(
  235. request: ClientRequest.Stream<Grpc_Testing_SimpleRequest>,
  236. serializer: some MessageSerializer<Grpc_Testing_SimpleRequest>,
  237. deserializer: some MessageDeserializer<Grpc_Testing_SimpleResponse>,
  238. options: CallOptions,
  239. _ body: @Sendable @escaping (ClientResponse.Stream<Grpc_Testing_SimpleResponse>) async throws -> R
  240. ) async throws -> R where R: Sendable
  241. }
  242. @available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
  243. extension Grpc_Testing_BenchmarkService.ClientProtocol {
  244. internal func unaryCall<R>(
  245. request: ClientRequest.Single<Grpc_Testing_SimpleRequest>,
  246. options: CallOptions = .defaults,
  247. _ body: @Sendable @escaping (ClientResponse.Single<Grpc_Testing_SimpleResponse>) async throws -> R = {
  248. try $0.message
  249. }
  250. ) async throws -> R where R: Sendable {
  251. try await self.unaryCall(
  252. request: request,
  253. serializer: ProtobufSerializer<Grpc_Testing_SimpleRequest>(),
  254. deserializer: ProtobufDeserializer<Grpc_Testing_SimpleResponse>(),
  255. options: options,
  256. body
  257. )
  258. }
  259. internal func streamingCall<R>(
  260. request: ClientRequest.Stream<Grpc_Testing_SimpleRequest>,
  261. options: CallOptions = .defaults,
  262. _ body: @Sendable @escaping (ClientResponse.Stream<Grpc_Testing_SimpleResponse>) async throws -> R
  263. ) async throws -> R where R: Sendable {
  264. try await self.streamingCall(
  265. request: request,
  266. serializer: ProtobufSerializer<Grpc_Testing_SimpleRequest>(),
  267. deserializer: ProtobufDeserializer<Grpc_Testing_SimpleResponse>(),
  268. options: options,
  269. body
  270. )
  271. }
  272. internal func streamingFromClient<R>(
  273. request: ClientRequest.Stream<Grpc_Testing_SimpleRequest>,
  274. options: CallOptions = .defaults,
  275. _ body: @Sendable @escaping (ClientResponse.Single<Grpc_Testing_SimpleResponse>) async throws -> R = {
  276. try $0.message
  277. }
  278. ) async throws -> R where R: Sendable {
  279. try await self.streamingFromClient(
  280. request: request,
  281. serializer: ProtobufSerializer<Grpc_Testing_SimpleRequest>(),
  282. deserializer: ProtobufDeserializer<Grpc_Testing_SimpleResponse>(),
  283. options: options,
  284. body
  285. )
  286. }
  287. internal func streamingFromServer<R>(
  288. request: ClientRequest.Single<Grpc_Testing_SimpleRequest>,
  289. options: CallOptions = .defaults,
  290. _ body: @Sendable @escaping (ClientResponse.Stream<Grpc_Testing_SimpleResponse>) async throws -> R
  291. ) async throws -> R where R: Sendable {
  292. try await self.streamingFromServer(
  293. request: request,
  294. serializer: ProtobufSerializer<Grpc_Testing_SimpleRequest>(),
  295. deserializer: ProtobufDeserializer<Grpc_Testing_SimpleResponse>(),
  296. options: options,
  297. body
  298. )
  299. }
  300. internal func streamingBothWays<R>(
  301. request: ClientRequest.Stream<Grpc_Testing_SimpleRequest>,
  302. options: CallOptions = .defaults,
  303. _ body: @Sendable @escaping (ClientResponse.Stream<Grpc_Testing_SimpleResponse>) async throws -> R
  304. ) async throws -> R where R: Sendable {
  305. try await self.streamingBothWays(
  306. request: request,
  307. serializer: ProtobufSerializer<Grpc_Testing_SimpleRequest>(),
  308. deserializer: ProtobufDeserializer<Grpc_Testing_SimpleResponse>(),
  309. options: options,
  310. body
  311. )
  312. }
  313. }
  314. @available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
  315. internal struct Grpc_Testing_BenchmarkServiceClient: Grpc_Testing_BenchmarkService.ClientProtocol {
  316. private let client: GRPCCore.GRPCClient
  317. internal init(wrapping client: GRPCCore.GRPCClient) {
  318. self.client = client
  319. }
  320. /// One request followed by one response.
  321. /// The server returns the client payload as-is.
  322. internal func unaryCall<R>(
  323. request: ClientRequest.Single<Grpc_Testing_SimpleRequest>,
  324. serializer: some MessageSerializer<Grpc_Testing_SimpleRequest>,
  325. deserializer: some MessageDeserializer<Grpc_Testing_SimpleResponse>,
  326. options: CallOptions = .defaults,
  327. _ body: @Sendable @escaping (ClientResponse.Single<Grpc_Testing_SimpleResponse>) async throws -> R = {
  328. try $0.message
  329. }
  330. ) async throws -> R where R: Sendable {
  331. try await self.client.unary(
  332. request: request,
  333. descriptor: Grpc_Testing_BenchmarkService.Method.UnaryCall.descriptor,
  334. serializer: serializer,
  335. deserializer: deserializer,
  336. options: options,
  337. handler: body
  338. )
  339. }
  340. /// Repeated sequence of one request followed by one response.
  341. /// Should be called streaming ping-pong
  342. /// The server returns the client payload as-is on each response
  343. internal func streamingCall<R>(
  344. request: ClientRequest.Stream<Grpc_Testing_SimpleRequest>,
  345. serializer: some MessageSerializer<Grpc_Testing_SimpleRequest>,
  346. deserializer: some MessageDeserializer<Grpc_Testing_SimpleResponse>,
  347. options: CallOptions = .defaults,
  348. _ body: @Sendable @escaping (ClientResponse.Stream<Grpc_Testing_SimpleResponse>) async throws -> R
  349. ) async throws -> R where R: Sendable {
  350. try await self.client.bidirectionalStreaming(
  351. request: request,
  352. descriptor: Grpc_Testing_BenchmarkService.Method.StreamingCall.descriptor,
  353. serializer: serializer,
  354. deserializer: deserializer,
  355. options: options,
  356. handler: body
  357. )
  358. }
  359. /// Single-sided unbounded streaming from client to server
  360. /// The server returns the client payload as-is once the client does WritesDone
  361. internal func streamingFromClient<R>(
  362. request: ClientRequest.Stream<Grpc_Testing_SimpleRequest>,
  363. serializer: some MessageSerializer<Grpc_Testing_SimpleRequest>,
  364. deserializer: some MessageDeserializer<Grpc_Testing_SimpleResponse>,
  365. options: CallOptions = .defaults,
  366. _ body: @Sendable @escaping (ClientResponse.Single<Grpc_Testing_SimpleResponse>) async throws -> R = {
  367. try $0.message
  368. }
  369. ) async throws -> R where R: Sendable {
  370. try await self.client.clientStreaming(
  371. request: request,
  372. descriptor: Grpc_Testing_BenchmarkService.Method.StreamingFromClient.descriptor,
  373. serializer: serializer,
  374. deserializer: deserializer,
  375. options: options,
  376. handler: body
  377. )
  378. }
  379. /// Single-sided unbounded streaming from server to client
  380. /// The server repeatedly returns the client payload as-is
  381. internal func streamingFromServer<R>(
  382. request: ClientRequest.Single<Grpc_Testing_SimpleRequest>,
  383. serializer: some MessageSerializer<Grpc_Testing_SimpleRequest>,
  384. deserializer: some MessageDeserializer<Grpc_Testing_SimpleResponse>,
  385. options: CallOptions = .defaults,
  386. _ body: @Sendable @escaping (ClientResponse.Stream<Grpc_Testing_SimpleResponse>) async throws -> R
  387. ) async throws -> R where R: Sendable {
  388. try await self.client.serverStreaming(
  389. request: request,
  390. descriptor: Grpc_Testing_BenchmarkService.Method.StreamingFromServer.descriptor,
  391. serializer: serializer,
  392. deserializer: deserializer,
  393. options: options,
  394. handler: body
  395. )
  396. }
  397. /// Two-sided unbounded streaming between server to client
  398. /// Both sides send the content of their own choice to the other
  399. internal func streamingBothWays<R>(
  400. request: ClientRequest.Stream<Grpc_Testing_SimpleRequest>,
  401. serializer: some MessageSerializer<Grpc_Testing_SimpleRequest>,
  402. deserializer: some MessageDeserializer<Grpc_Testing_SimpleResponse>,
  403. options: CallOptions = .defaults,
  404. _ body: @Sendable @escaping (ClientResponse.Stream<Grpc_Testing_SimpleResponse>) async throws -> R
  405. ) async throws -> R where R: Sendable {
  406. try await self.client.bidirectionalStreaming(
  407. request: request,
  408. descriptor: Grpc_Testing_BenchmarkService.Method.StreamingBothWays.descriptor,
  409. serializer: serializer,
  410. deserializer: deserializer,
  411. options: options,
  412. handler: body
  413. )
  414. }
  415. }