Skip to content

Commit 12116d0

Browse files
authored
Merge pull request #39 from sidepelican/async_servicebuilder
Allow async and throwing for service builder
2 parents 36bce2f + 8e38264 commit 12116d0

File tree

5 files changed

+9
-9
lines changed

5 files changed

+9
-9
lines changed

Sources/CallableKitHummingbirdTransport/HummingbirdTransport.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,21 @@ import Foundation
33
import Hummingbird
44

55
public struct HummingbirdTransport<Router: RouterMethods, Service>: ServiceTransport {
6-
public init(router: Router, serviceBuilder: @escaping @Sendable (Request, Router.Context) -> Service) {
6+
public init(router: Router, serviceBuilder: @escaping @Sendable (Request, Router.Context) async throws -> Service) {
77
self.router = router
88
self.serviceBuilder = serviceBuilder
99
}
1010

1111
public var router: Router
12-
public var serviceBuilder: @Sendable (Request, Router.Context) -> Service
12+
public var serviceBuilder: @Sendable (Request, Router.Context) async throws -> Service
1313

1414
public func register<Request: Decodable, Response: Encodable>(
1515
path: String,
1616
methodSelector: @escaping @Sendable (Service.Type) -> (Service) -> (Request) async throws -> Response
1717
) {
1818
router.post(RouterPath(path)) { [serviceBuilder] request, context in
1919
let serviceRequest = try await makeDecoder().decode(Request.self, from: request, context: context)
20-
let service = serviceBuilder(request, context)
20+
let service = try await serviceBuilder(request, context)
2121
let serviceResponse = try await methodSelector(Service.self)(service)(serviceRequest)
2222
var response = try makeEncoder().encode(serviceResponse, from: request, context: context)
2323
response.headers[.cacheControl] = "no-store"

Sources/CallableKitVaporTransport/VaporTransport.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import CallableKit
22
import Vapor
33

44
public struct VaporTransport<Service>: ServiceTransport {
5-
public init(router: any RoutesBuilder, serviceBuilder: @escaping @Sendable (Request) -> Service) {
5+
public init(router: any RoutesBuilder, serviceBuilder: @escaping @Sendable (Request) async throws -> Service) {
66
self.router = router
77
self.serviceBuilder = serviceBuilder
88
}
99

1010
public var router: any RoutesBuilder
11-
public var serviceBuilder: @Sendable (Request) -> Service
11+
public var serviceBuilder: @Sendable (Request) async throws -> Service
1212

1313
public func register<Request: Decodable, Response: Encodable>(
1414
path: String,
@@ -19,7 +19,7 @@ public struct VaporTransport<Service>: ServiceTransport {
1919
throw Abort(.badRequest, reason: "no body")
2020
}
2121
let serviceRequest = try makeDecoder().decode(Request.self, from: body)
22-
let service = serviceBuilder(request)
22+
let service = try await serviceBuilder(request)
2323
let serviceResponse = try await methodSelector(Service.self)(service)(serviceRequest)
2424

2525
var headers = HTTPHeaders()

example/Sources/HBServer/HBMain.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ struct ErrorMiddleware<Context: RequestContext>: MiddlewareProtocol {
2929
router.add(middleware: ErrorMiddleware())
3030

3131
configureAccountServiceProtocol(transport: HummingbirdTransport(router: router) { _, _ in
32-
makeAccountService()
32+
try await makeAccountService()
3333
})
3434
configureEchoServiceProtocol(transport: HummingbirdTransport(router: router) { _, _ in
3535
makeEchoService()

example/Sources/Service/AccountService.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import APIDefinition
22
import OtherDependency
33

4-
public func makeAccountService() -> some AccountServiceProtocol {
4+
public func makeAccountService() async throws -> some AccountServiceProtocol {
55
AccountService()
66
}
77

example/Sources/VaporServer/VaporMain.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import Service
2525

2626
app.group(myErrorMiddleware) { routes in
2727
configureAccountServiceProtocol(transport: VaporTransport(router: routes) { _ in
28-
makeAccountService()
28+
try await makeAccountService()
2929
})
3030
configureEchoServiceProtocol(transport: VaporTransport(router: routes) { _ in
3131
makeEchoService()

0 commit comments

Comments
 (0)