Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

@range implementation for integer shapes #2005

Merged
merged 78 commits into from Nov 28, 2022
Merged
Show file tree
Hide file tree
Changes from 72 commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
42cddc8
Draft of @range implementation for integer shapes
LukeMathWalker Nov 18, 2022
bc62d0e
Green tests.
LukeMathWalker Nov 18, 2022
53f5c59
Merge branch 'main' into range
LukeMathWalker Nov 18, 2022
4e6db6b
Fix serialization of constrained integers.
LukeMathWalker Nov 18, 2022
1c19bc7
Fix tagger to include Integer simple shapes.
LukeMathWalker Nov 18, 2022
35148b1
Merge branch 'main' into range
LukeMathWalker Nov 18, 2022
cf72c16
Add range trait to the entry about constraint traits in our changelog.
LukeMathWalker Nov 18, 2022
2cbe2a5
Bind a range-constrained integer to various HTTP parts to test our im…
LukeMathWalker Nov 18, 2022
0ac5e66
Merge branch 'main' into range
LukeMathWalker Nov 18, 2022
f50b7b0
Rename ConstrainedIntGeneratorTest to ConstrainedIntegerGeneratorTest…
LukeMathWalker Nov 18, 2022
0b80d2e
Remove AsRef implementation.
LukeMathWalker Nov 18, 2022
2e77b8f
Fix constraints models.
LukeMathWalker Nov 18, 2022
58c156f
Fix conversion.
LukeMathWalker Nov 18, 2022
a959004
Use ReturnSymbolToParse to dry up.
LukeMathWalker Nov 18, 2022
3cc5e35
Fix builder when constrained types should not be exposed.
LukeMathWalker Nov 18, 2022
1e9d6c7
Add customisation to unwrap constrained integers.
LukeMathWalker Nov 18, 2022
22ff34f
Getting closer - collections need to be handled differently to make e…
LukeMathWalker Nov 18, 2022
395c965
Refactor `renderHeaders`
LukeMathWalker Nov 21, 2022
a65f59d
Fix constraints test.
LukeMathWalker Nov 21, 2022
250139d
Fix ebs.
LukeMathWalker Nov 21, 2022
581162b
Rename for clarity.
LukeMathWalker Nov 21, 2022
d719328
Remove unnecessary From implementation.
LukeMathWalker Nov 21, 2022
6e54c5e
Rename `Size` variant to `Range`.
LukeMathWalker Nov 21, 2022
d34a525
Remove stray comments.
LukeMathWalker Nov 21, 2022
5762d2f
Rename for clarity
LukeMathWalker Nov 21, 2022
ea9bdac
Rename for consistency
LukeMathWalker Nov 21, 2022
19297bc
Add test to guard against types for which we do not support range yet
LukeMathWalker Nov 21, 2022
35dfb82
DRY up branches and the relevant tests.
LukeMathWalker Nov 21, 2022
54e44c4
Merge branch 'main' into range
LukeMathWalker Nov 21, 2022
a94304f
Fix header name.
LukeMathWalker Nov 21, 2022
f36a617
Fix serialization bug for default values in headers.
LukeMathWalker Nov 21, 2022
c2773cd
Fix serialization issue for primitive headers.
LukeMathWalker Nov 22, 2022
f37a560
Remove SetOfRangeInteger
LukeMathWalker Nov 22, 2022
5cd6d35
Fix pubcrateconstrained unit test.
LukeMathWalker Nov 22, 2022
72cda3a
Remove duplication
LukeMathWalker Nov 22, 2022
5c5c026
Merge branch 'main' into range
LukeMathWalker Nov 22, 2022
6efc9b9
Revert "Remove SetOfRangeInteger"
LukeMathWalker Nov 22, 2022
8359468
Reintroduce `SetOfRangeInteger`, but keep them commented out.
LukeMathWalker Nov 22, 2022
d36930d
Ignore leading whitespace.
LukeMathWalker Nov 22, 2022
dc0ef4b
Merge branch 'main' into range
LukeMathWalker Nov 22, 2022
87e4766
Merge branch 'main' into range
LukeMathWalker Nov 22, 2022
7328a9e
Merge branch 'main' into range
LukeMathWalker Nov 23, 2022
d259d86
Update codegen-core/src/main/kotlin/software/amazon/smithy/rust/codeg…
LukeMathWalker Nov 23, 2022
e2c5952
Update codegen-core/src/main/kotlin/software/amazon/smithy/rust/codeg…
LukeMathWalker Nov 23, 2022
582de6d
Update codegen-server/src/main/kotlin/software/amazon/smithy/rust/cod…
LukeMathWalker Nov 23, 2022
3f1bd70
Update codegen-server/src/test/kotlin/software/amazon/smithy/rust/cod…
LukeMathWalker Nov 23, 2022
64e3312
Unify with a single rustTemplate invocation.
LukeMathWalker Nov 23, 2022
f927eaf
Rename `Type` to `NumberType`
LukeMathWalker Nov 23, 2022
922d489
Update codegen-server/src/test/kotlin/software/amazon/smithy/rust/cod…
LukeMathWalker Nov 23, 2022
563c1cc
Formatting issue.
LukeMathWalker Nov 23, 2022
0ec9f13
Move and rename test helper.
LukeMathWalker Nov 23, 2022
f39669b
Dry up the logic for default serialization.
LukeMathWalker Nov 23, 2022
bdec811
Ooops, I swapped the two branches.
LukeMathWalker Nov 23, 2022
b2c4c9b
Merge main
LukeMathWalker Nov 23, 2022
69c7b80
Add a wrapper block
LukeMathWalker Nov 23, 2022
040eef6
Fix support detection.
LukeMathWalker Nov 23, 2022
b1787bb
Fix CHANGELOG.
LukeMathWalker Nov 23, 2022
5141fa4
Add (failing) protocol tests for @range on byte/integer/long.
LukeMathWalker Nov 23, 2022
50aa3b6
Fix validation message.
LukeMathWalker Nov 23, 2022
c9a7556
Mark some tests as expected to fail.
LukeMathWalker Nov 23, 2022
3977b8c
Use ValueExpression everywhere for more granular control of the owner…
LukeMathWalker Nov 24, 2022
2b31a14
Merge branch 'main' into range
LukeMathWalker Nov 24, 2022
9ccad94
Use the new enhanced module facilities
LukeMathWalker Nov 24, 2022
6024264
Fixes.
LukeMathWalker Nov 24, 2022
1a884f6
Fix formatting
LukeMathWalker Nov 24, 2022
48f8fb9
Remove unnecessary when.
LukeMathWalker Nov 24, 2022
fc3cf47
Update codegen-core/common-test-models/constraints.smithy
LukeMathWalker Nov 25, 2022
28eae9c
Remove unused shapes.
LukeMathWalker Nov 25, 2022
5b71893
Avoid mixing concerns in our test shapes for integer constraints.
LukeMathWalker Nov 25, 2022
2211f3f
Reuse the trait info machinery
LukeMathWalker Nov 25, 2022
28357fe
Update stale comment
LukeMathWalker Nov 25, 2022
1d74bec
Fix unused attribute.
LukeMathWalker Nov 25, 2022
374f839
Update codegen-core/src/main/kotlin/software/amazon/smithy/rust/codeg…
LukeMathWalker Nov 28, 2022
2cf6141
Merge branch 'main' into range
LukeMathWalker Nov 28, 2022
04ffdb7
Avoid unnecessary bindings by manipulating the serialization context …
LukeMathWalker Nov 28, 2022
a51e18a
Avoid unnecessary bindings in header serialization by introducing and…
LukeMathWalker Nov 28, 2022
3160a92
Add code examples.
LukeMathWalker Nov 28, 2022
7d4d59f
Move `safeName` call into the if branch.
LukeMathWalker Nov 28, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion CHANGELOG.next.toml
Expand Up @@ -242,13 +242,14 @@ message = """

* The `length` trait on `string` shapes.
* The `length` trait on `map` shapes.
* The `range` trait on `integer` shapes.
* The `pattern` trait on `string` shapes.

Upon receiving a request that violates the modeled constraints, the server SDK will reject it with a message indicating why.

Unsupported (constraint trait, target shape) combinations will now fail at code generation time, whereas previously they were just ignored. This is a breaking change to raise awareness in service owners of their server SDKs behaving differently than what was modeled. To continue generating a server SDK with unsupported constraint traits, set `codegenConfig.ignoreUnsupportedConstraints` to `true` in your `smithy-build.json`.
"""
references = ["smithy-rs#1199", "smithy-rs#1342", "smithy-rs#1401", "smithy-rs#1998"]
references = ["smithy-rs#1199", "smithy-rs#1342", "smithy-rs#1401", "smithy-rs#2005", "smithy-rs#1998"]
meta = { "breaking" = true, "tada" = true, "bug" = false, "target" = "server" }
author = "david-perez"

Expand Down
86 changes: 79 additions & 7 deletions codegen-core/common-test-models/constraints.smithy
Expand Up @@ -19,7 +19,6 @@ service ConstraintsService {
// combination.
QueryParamsTargetingLengthMapOperation,
QueryParamsTargetingMapOfLengthStringOperation,
QueryParamsTargetingMapOfEnumStringOperation,
QueryParamsTargetingMapOfListOfLengthStringOperation,
QueryParamsTargetingMapOfSetOfLengthStringOperation,
QueryParamsTargetingMapOfListOfEnumStringOperation,
Expand All @@ -30,6 +29,9 @@ service ConstraintsService {
QueryParamsTargetingMapOfListOfLengthPatternStringOperation,

HttpPrefixHeadersTargetingLengthMapOperation,

QueryParamsTargetingMapOfEnumStringOperation,
QueryParamsTargetingMapOfListOfEnumStringOperation,
// TODO(https://github.com/awslabs/smithy-rs/issues/1431)
// HttpPrefixHeadersTargetingMapOfEnumStringOperation,

Expand All @@ -47,7 +49,7 @@ operation ConstrainedShapesOperation {
errors: [ValidationException]
}

@http(uri: "/constrained-http-bound-shapes-operation/{lengthStringLabel}/{enumStringLabel}", method: "POST")
@http(uri: "/constrained-http-bound-shapes-operation/{rangeIntegerLabel}/{lengthStringLabel}/{enumStringLabel}", method: "POST")
operation ConstrainedHttpBoundShapesOperation {
input: ConstrainedHttpBoundShapesOperationInputOutput,
output: ConstrainedHttpBoundShapesOperationInputOutput,
Expand Down Expand Up @@ -173,18 +175,24 @@ structure ConstrainedHttpBoundShapesOperationInputOutput {
@httpLabel
lengthStringLabel: LengthString,

@required
@httpLabel
rangeIntegerLabel: RangeInteger,

@required
@httpLabel
enumStringLabel: EnumString,

// TODO(https://github.com/awslabs/smithy-rs/issues/1394) `@required` not working
// @required
@httpPrefixHeaders("X-Prefix-Headers-")
@required
@httpPrefixHeaders("X-Length-String-Prefix-Headers-")
lengthStringHeaderMap: MapOfLengthString,

@httpHeader("X-Length")
lengthStringHeader: LengthString,

@httpHeader("X-Range-Integer")
rangeIntegerHeader: RangeInteger,

// @httpHeader("X-Length-MediaType")
// lengthStringHeaderWithMediaType: MediaTypeLengthString,

Expand All @@ -196,6 +204,14 @@ structure ConstrainedHttpBoundShapesOperationInputOutput {
@httpHeader("X-Length-List")
lengthStringListHeader: ListOfLengthString,

// TODO(https://github.com/awslabs/smithy-rs/issues/1401): a `set` shape is
// just a `list` shape with `uniqueItems`, which hasn't been implemented yet.
// @httpHeader("X-Range-Integer-Set")
// rangeIntegerSetHeader: SetOfRangeInteger,

@httpHeader("X-Range-Integer-List")
rangeIntegerListHeader: ListOfRangeInteger,

// TODO(https://github.com/awslabs/smithy-rs/issues/1431)
// @httpHeader("X-Enum")
//enumStringHeader: EnumString,
Expand All @@ -206,6 +222,9 @@ structure ConstrainedHttpBoundShapesOperationInputOutput {
@httpQuery("lengthString")
lengthStringQuery: LengthString,

@httpQuery("rangeInteger")
rangeIntegerQuery: RangeInteger,

@httpQuery("enumString")
enumStringQuery: EnumString,

Expand All @@ -217,6 +236,14 @@ structure ConstrainedHttpBoundShapesOperationInputOutput {
// @httpQuery("lengthStringSet")
// lengthStringSetQuery: SetOfLengthString,

@httpQuery("rangeIntegerList")
rangeIntegerListQuery: ListOfRangeInteger,

// TODO(https://github.com/awslabs/smithy-rs/issues/1401): a `set` shape is
// just a `list` shape with `uniqueItems`, which hasn't been implemented yet.
// @httpQuery("rangeIntegerSet")
// rangeIntegerSetQuery: SetOfRangeInteger,

@httpQuery("enumStringList")
enumStringListQuery: ListOfEnumString,
}
Expand Down Expand Up @@ -332,6 +359,11 @@ structure ConA {
maxLengthString: MaxLengthString,
fixedLengthString: FixedLengthString,

rangeInteger: RangeInteger,
minRangeInteger: MinRangeInteger,
maxRangeInteger: MaxRangeInteger,
fixedValueInteger: FixedValueInteger,

conBList: ConBList,
conBList2: ConBList2,

Expand All @@ -352,7 +384,13 @@ structure ConA {
// setOfLengthString: SetOfLengthString,
mapOfLengthString: MapOfLengthString,

nonStreamingBlob: NonStreamingBlob,
listOfRangeInteger: ListOfRangeInteger,
// TODO(https://github.com/awslabs/smithy-rs/issues/1401): a `set` shape is
// just a `list` shape with `uniqueItems`, which hasn't been implemented yet.
// setOfRangeInteger: SetOfRangeInteger,
mapOfRangeInteger: MapOfRangeInteger,

nonStreamingBlob: NonStreamingBlob

patternString: PatternString,
mapOfPatternString: MapOfPatternString,
Expand All @@ -374,6 +412,11 @@ map MapOfLengthString {
value: LengthString,
}

map MapOfRangeInteger {
key: String,
value: RangeInteger,
}

map MapOfEnumString {
key: EnumString,
value: EnumString,
Expand Down Expand Up @@ -407,6 +450,13 @@ map MapOfSetOfLengthString {
value: ListOfLengthString
}

// TODO(https://github.com/awslabs/smithy-rs/issues/1401): a `set` shape is
// just a `list` shape with `uniqueItems`, which hasn't been implemented yet.
// map MapOfSetOfRangeInteger {
// key: LengthString,
// value: SetOfRangeInteger,
// }

@length(min: 2, max: 8)
list LengthListOfLengthString {
member: LengthString
Expand All @@ -418,7 +468,7 @@ string LengthString
@length(min: 2)
string MinLengthString

@length(min: 69)
@length(max: 69)
string MaxLengthString

@length(min: 69, max: 69)
Expand All @@ -435,6 +485,18 @@ string LengthPatternString
@length(min: 1, max: 69)
string MediaTypeLengthString

@range(min: -0, max: 69)
integer RangeInteger

@range(min: -10)
integer MinRangeInteger

@range(max: 69)
integer MaxRangeInteger

@range(min: 69, max: 69)
integer FixedValueInteger

/// A union with constrained members.
union ConstrainedUnion {
enumString: EnumString,
Expand Down Expand Up @@ -480,6 +542,16 @@ list ListOfLengthString {
member: LengthString
}

// TODO(https://github.com/awslabs/smithy-rs/issues/1401): a `set` shape is
// just a `list` shape with `uniqueItems`, which hasn't been implemented yet.
// set SetOfRangeInteger {
// member: RangeInteger
// }

list ListOfRangeInteger {
member: RangeInteger
}

list ListOfEnumString {
member: EnumString
}
Expand Down