Skip to content

Commit

Permalink
Update endpoint param and endpoint middleware codegen tests & test sm…
Browse files Browse the repository at this point in the history
…ithy model.
  • Loading branch information
Sichan Yoo committed Aug 15, 2024
1 parent fa0ec45 commit 1e65e05
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,33 +30,45 @@ public struct EndpointParams {
public let boolBaz: Swift.String?
public let boolFoo: Swift.Bool
public let endpoint: Swift.String?
public let flattenedArray: Swift.Array<Swift.String>?
public let keysFunctionArray: Swift.Array<Swift.String>?
public let region: Swift.String
public let stringArrayBar: Swift.Array<Swift.String>?
public let stringBar: Swift.String?
public let stringBaz: Swift.String?
public let stringFoo: Swift.String?
public let subfield: Swift.String?
public let wildcardProjectionArray: Swift.Array<Swift.String>?
public init(
boolBar: Swift.Bool? = nil,
boolBaz: Swift.String? = nil,
boolFoo: Swift.Bool,
endpoint: Swift.String? = nil,
flattenedArray: Swift.Array<Swift.String>? = nil,
keysFunctionArray: Swift.Array<Swift.String>? = nil,
region: Swift.String,
stringArrayBar: Swift.Array<Swift.String>? = nil,
stringBar: Swift.String? = nil,
stringBaz: Swift.String? = nil,
stringFoo: Swift.String? = nil
stringFoo: Swift.String? = nil,
subfield: Swift.String? = nil,
wildcardProjectionArray: Swift.Array<Swift.String>? = nil
)
{
self.boolBar = boolBar
self.boolBaz = boolBaz
self.boolFoo = boolFoo
self.endpoint = endpoint
self.flattenedArray = flattenedArray
self.keysFunctionArray = keysFunctionArray
self.region = region
self.stringArrayBar = stringArrayBar
self.stringBar = stringBar
self.stringBaz = stringBaz
self.stringFoo = stringFoo
self.subfield = subfield
self.wildcardProjectionArray = wildcardProjectionArray
}
}
"""
Expand All @@ -79,11 +91,15 @@ extension EndpointParams: ClientRuntime.EndpointsRequestContextProviding {
try context.add(name: "boolBaz", value: self.boolBaz)
try context.add(name: "boolFoo", value: self.boolFoo)
try context.add(name: "endpoint", value: self.endpoint)
try context.add(name: "flattenedArray", value: self.flattenedArray)
try context.add(name: "keysFunctionArray", value: self.keysFunctionArray)
try context.add(name: "region", value: self.region)
try context.add(name: "stringArrayBar", value: self.stringArrayBar)
try context.add(name: "stringBar", value: self.stringBar)
try context.add(name: "stringBaz", value: self.stringBaz)
try context.add(name: "stringFoo", value: self.stringFoo)
try context.add(name: "subfield", value: self.subfield)
try context.add(name: "wildcardProjectionArray", value: self.wildcardProjectionArray)
return context
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,32 @@ class OperationEndpointResolverMiddlewareTests {
middleware.render(context.ctx, writer, operation, "operationStack")
var contents = writer.toString()
val expected = """
// OperationContextParam - JMESPath expression: "bar.objects[].content"
let bar = input.bar
let objects = bar?.objects
let projection: [Swift.String]? = objects?.compactMap { original in
let content = original.content
return content
}
// OperationContextParam - JMESPath expression: "keys(bar.mapping)"
let bar2 = input.bar
let mapping = bar2?.mapping
let keys = mapping?.keys.map { String(${'$'}0) }
guard let region = config.region else {
throw Smithy.ClientError.unknownError("Missing required parameter: region")
}
let endpointParams = EndpointParams(boolBar: true, boolBaz: input.fuzz, boolFoo: config.boolFoo, endpoint: config.endpoint, region: region, stringArrayBar: ["five", "six", "seven"], stringBar: "some value", stringBaz: input.buzz, stringFoo: config.stringFoo)
// OperationContextParam - JMESPath expression: "bar.subfield.subfield2"
let bar3 = input.bar
let subfield = bar3?.subfield
let subfield2 = subfield?.subfield2
// OperationContextParam - JMESPath expression: "bar.objects[*].id"
let bar4 = input.bar
let objects2 = bar4?.objects
let projection2: [Swift.String]? = objects2?.compactMap { original in
let id = original.id
return id
}
let endpointParams = EndpointParams(boolBar: true, boolBaz: input.fuzz, boolFoo: config.boolFoo, endpoint: config.endpoint, flattenedArray: projection, keysFunctionArray: keys, region: region, stringArrayBar: ["five", "six", "seven"], stringBar: "some value", stringBaz: input.buzz, stringFoo: config.stringFoo, subfield: subfield2, wildcardProjectionArray: projection2)
builder.applyEndpoint(AWSClientRuntime.EndpointResolverMiddleware<GetThingOutput, EndpointParams>(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: ${'$'}0) }, endpointParams: endpointParams))
"""
contents.shouldContainOnlyOnce(expected)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use aws.protocols#restJson1
use smithy.rules#clientContextParams
use smithy.rules#staticContextParams
use smithy.rules#contextParam
use smithy.rules#operationContextParams
use smithy.rules#endpointRuleSet

@restJson1
Expand Down Expand Up @@ -37,6 +38,10 @@ apply ExampleService @endpointRuleSet({
boolBaz: {type: "string"},
stringArrayBar: {type: "stringArray"},
region: {type: "string", builtIn: "AWS::Region", required: true},
subfield: {type: "string"},
wildcardProjectionArray: {type: "stringArray"},
keysFunctionArray: {type: "stringArray"},
flattenedArray: {type: "stringArray"}
},
rules: []
})
Expand All @@ -47,6 +52,20 @@ apply ExampleService @endpointRuleSet({
boolBar: {value: true}
stringArrayBar: {value: ["five", "six", "seven"]}
)
@operationContextParams(
subfield: {
path: "bar.subfield.subfield2"
}
wildcardProjectionArray: {
path: "bar.objects[*].id"
}
keysFunctionArray: {
path: "keys(bar.mapping)"
}
flattenedArray: {
path: "bar.objects[].content"
}
)
@http(method: "POST", uri: "/endpointtest/getthing")
operation GetThing {
input: GetThingInput
Expand All @@ -61,4 +80,30 @@ structure GetThingInput {

@contextParam(name: "boolBaz")
fuzz: String

bar: NestedContainer
}

structure NestedContainer {
subfield: NestedSubfield
objects: ObjectIdentifierList
mapping: ObjectIdentifierMap
}

structure NestedSubfield {
subfield2: String
}

list ObjectIdentifierList {
member: ObjectIdentifier
}

structure ObjectIdentifier {
id: String
content: String
}

map ObjectIdentifierMap {
key: String
value: Integer
}

0 comments on commit 1e65e05

Please sign in to comment.