Skip to content

Commit

Permalink
Correctly handle path params with a hyphen in the name
Browse files Browse the repository at this point in the history
  • Loading branch information
czechboy0 committed Jul 23, 2024
1 parent db5d1ea commit 8531e2c
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ extension OperationDescription {
/// The regular expression for parsing subcomponents of path components.
///
/// Either a parameter `{foo}` or a constant value `foo`.
private static let pathParameterRegex = try! NSRegularExpression(pattern: #"(\{[a-zA-Z0-9_]+\})|([^{}]+)"#)
private static let pathParameterRegex = try! NSRegularExpression(pattern: #"(\{[a-zA-Z0-9_-]+\})|([^{}]+)"#)

/// Returns a string that contains the template to be generated for
/// the client that fills in path parameters, and an array expression
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2605,6 +2605,7 @@ final class SnippetBasedReferenceTests: XCTestCase {
"""
)
}

func testRequestWithPathParams() throws {
try self.assertRequestInTypesClientServerTranslation(
"""
Expand Down Expand Up @@ -2696,6 +2697,65 @@ final class SnippetBasedReferenceTests: XCTestCase {
)
}

func testRequestWithPathParamWithHyphen() throws {
try self.assertRequestInTypesClientServerTranslation(
"""
/foo/{a-b}:
get:
parameters:
- name: a-b
in: path
required: true
schema:
type: string
operationId: getFoo
responses:
default:
description: Response
""",
types: """
public struct Input: Sendable, Hashable {
public struct Path: Sendable, Hashable {
public var a_hyphen_b: Swift.String
public init(a_hyphen_b: Swift.String) {
self.a_hyphen_b = a_hyphen_b
}
}
public var path: Operations.getFoo.Input.Path
public init(path: Operations.getFoo.Input.Path) {
self.path = path
}
}
""",
client: """
{ input in
let path = try converter.renderedPath(
template: "/foo/{}",
parameters: [
input.path.a_hyphen_b
]
)
var request: HTTPTypes.HTTPRequest = .init(
soar_path: path,
method: .get
)
suppressMutabilityWarning(&request)
return (request, nil)
}
""",
server: """
{ request, requestBody, metadata in
let path: Operations.getFoo.Input.Path = .init(a_hyphen_b: try converter.getPathParameterAsURI(
in: metadata.pathParameters,
name: "a-b",
as: Swift.String.self
))
return Operations.getFoo.Input(path: path)
}
"""
)
}

func testRequestRequiredBodyPrimitiveSchema() throws {
try self.assertRequestInTypesClientServerTranslation(
"""
Expand Down

0 comments on commit 8531e2c

Please sign in to comment.