Skip to content

Commit bd3003e

Browse files
committed
dependency: upgrade smithy to 1.27.2 and correct query empty list serialization
1 parent 0d94f22 commit bd3003e

File tree

103 files changed

+7147
-1770
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

103 files changed

+7147
-1770
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{
2+
"id": "c3a62c73-ab62-4737-a829-d8c85167835e",
3+
"type": "dependency",
4+
"description": "Upgrade smithy to 1.27.2 and correct empty query list serialization.",
5+
"modules": [
6+
"internal/protocoltest/awsrestjson",
7+
"internal/protocoltest/ec2query",
8+
"internal/protocoltest/jsonrpc",
9+
"internal/protocoltest/jsonrpc10",
10+
"internal/protocoltest/query",
11+
"internal/protocoltest/restxml",
12+
"service/autoscaling",
13+
"service/cloudformation",
14+
"service/cloudsearch",
15+
"service/cloudwatch",
16+
"service/docdb",
17+
"service/ec2",
18+
"service/elasticache",
19+
"service/elasticbeanstalk",
20+
"service/elasticloadbalancing",
21+
"service/elasticloadbalancingv2",
22+
"service/iam",
23+
"service/neptune",
24+
"service/rds",
25+
"service/redshift",
26+
"service/ses",
27+
"service/sns",
28+
"service/sqs",
29+
"service/sts"
30+
]
31+
}

aws/protocol/query/array.go

+11
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,31 @@ type Array struct {
3636
memberName string
3737
// Elements are stored in values, so we keep track of the list size here.
3838
size int32
39+
// Empty lists are encoded as "<prefix>=", if we add a value later we will
40+
// remove this encoding
41+
emptyValue Value
3942
}
4043

4144
func newArray(values url.Values, prefix string, flat bool, memberName string) *Array {
45+
emptyValue := newValue(values, prefix, flat)
46+
emptyValue.String("")
47+
4248
return &Array{
4349
values: values,
4450
prefix: prefix,
4551
flat: flat,
4652
memberName: memberName,
53+
emptyValue: emptyValue,
4754
}
4855
}
4956

5057
// Value adds a new element to the Query Array. Returns a Value type used to
5158
// encode the array element.
5259
func (a *Array) Value() Value {
60+
if a.size == 0 {
61+
delete(a.values, a.emptyValue.key)
62+
}
63+
5364
// Query lists start a 1, so adjust the size first
5465
a.size++
5566
prefix := a.prefix

aws/protocol/query/encoder_test.go

+16-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ package query
33
import (
44
"bytes"
55
"fmt"
6-
smithytesting "github.com/aws/smithy-go/testing"
76
"testing"
7+
8+
smithytesting "github.com/aws/smithy-go/testing"
89
)
910

1011
func TestEncode(t *testing.T) {
@@ -35,6 +36,13 @@ func TestEncode(t *testing.T) {
3536
},
3637
Expect: []byte(`list.spam.1=spam&list.spam.2=eggs`),
3738
},
39+
"empty list": {
40+
Encode: func(e *Encoder) error {
41+
e.Object().Key("list").Array("spam")
42+
return e.Encode()
43+
},
44+
Expect: []byte(`list=`),
45+
},
3846
"flat list": {
3947
Encode: func(e *Encoder) error {
4048
list := e.Object().FlatKey("list").Array("spam")
@@ -44,6 +52,13 @@ func TestEncode(t *testing.T) {
4452
},
4553
Expect: []byte(`list.1=spam&list.2=eggs`),
4654
},
55+
"empty flat list": {
56+
Encode: func(e *Encoder) error {
57+
e.Object().FlatKey("list").Array("spam")
58+
return e.Encode()
59+
},
60+
Expect: []byte(`list=`),
61+
},
4762
"map": {
4863
Encode: func(e *Encoder) error {
4964
mapValue := e.Object().Key("map").Map("key", "value")

codegen/gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
smithyVersion=1.25.2
1+
smithyVersion=1.27.2
22
smithyGradleVersion=0.6.0

codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/QueryShapeSerVisitor.java

-3
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,6 @@ protected void serializeCollection(GenerationContext context, CollectionShape sh
7575
MemberShape member = shape.getMember();
7676
Shape target = context.getModel().expectShape(member.getTarget());
7777

78-
// If the list is empty, exit early to avoid extra effort.
79-
writer.write("if len(v) == 0 { return nil }");
80-
8178
writer.write("array := value.Array($S)", getSerializedLocationName(member, "member"));
8279
writer.write("");
8380

internal/protocoltest/awsrestjson/api_op_AllQueryStringTypes.go

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/protocoltest/awsrestjson/api_op_AllQueryStringTypes_test.go

+95
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/protocoltest/awsrestjson/api_op_DatetimeOffsets.go

+101
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)