Skip to content

Commit 79cf615

Browse files
committed
HTTPRouteParameterValue
1 parent 7711e55 commit 79cf615

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

FlyingFox/Sources/HTTPRequest+RouteParameter.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,12 @@ public extension Array where Element == HTTPRequest.RouteParameter {
5555
first { $0.name == name }?.value
5656
}
5757
}
58+
59+
subscript<T: HTTPRouteParameterValue>(_ name: String, of type: T.Type = T.self) -> T? {
60+
guard let text = first(where: { $0.name == name })?.value,
61+
let value = try? T(parameter: text) else {
62+
return nil
63+
}
64+
return value
65+
}
5866
}

FlyingFox/Tests/HTTPRouteTests.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,26 @@ final class HTTPRouteTests: XCTestCase {
500500
)
501501
}
502502

503+
func testRouteParameterValuesA() {
504+
let route = HTTPRoute("GET /:foo/:bar")
505+
enum Beast: String, HTTPRouteParameterValue {
506+
case fish
507+
}
508+
509+
XCTAssertEqual(
510+
route.extractParameters(from: .make("/10/fish"))["foo"],
511+
10
512+
)
513+
XCTAssertEqual(
514+
route.extractParameters(from: .make("/20/fish"))["bar"],
515+
"fish"
516+
)
517+
XCTAssertEqual(
518+
route.extractParameters(from: .make("/20/fish"))["bar"],
519+
Beast.fish
520+
)
521+
}
522+
503523
#if compiler(>=5.9)
504524
func testPathParameters() {
505525
// given

0 commit comments

Comments
 (0)