47 lines
1.3 KiB
Swift
47 lines
1.3 KiB
Swift
import Hummingbird
|
|
|
|
/// A result builder that collects the route collections of ``RouterController`` values into a stack.
|
|
///
|
|
/// Mirrors the `MiddlewareFixedTypeBuilder` Hummingbird uses for `addMiddleware`, letting controllers be listed declaratively rather than having
|
|
/// their routes added one statement at a time.
|
|
@resultBuilder
|
|
public enum RouteCollectionBuilder<Context: RequestContext> {
|
|
|
|
public static func buildExpression(
|
|
_ controller: some RouterController<Context>
|
|
) -> [RouteCollection<Context>] {
|
|
[controller.routes]
|
|
}
|
|
|
|
public static func buildBlock(
|
|
_ collections: [RouteCollection<Context>]...
|
|
) -> [RouteCollection<Context>] {
|
|
collections.flatMap { $0 }
|
|
}
|
|
|
|
public static func buildOptional(
|
|
_ collections: [RouteCollection<Context>]?
|
|
) -> [RouteCollection<Context>] {
|
|
collections ?? []
|
|
}
|
|
|
|
public static func buildEither(
|
|
first collections: [RouteCollection<Context>]
|
|
) -> [RouteCollection<Context>] {
|
|
collections
|
|
}
|
|
|
|
public static func buildEither(
|
|
second collections: [RouteCollection<Context>]
|
|
) -> [RouteCollection<Context>] {
|
|
collections
|
|
}
|
|
|
|
public static func buildArray(
|
|
_ collections: [[RouteCollection<Context>]]
|
|
) -> [RouteCollection<Context>] {
|
|
collections.flatMap { $0 }
|
|
}
|
|
|
|
}
|