File tree Expand file tree Collapse file tree 2 files changed +28
-0
lines changed Expand file tree Collapse file tree 2 files changed +28
-0
lines changed Original file line number Diff line number Diff 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}
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments