Skip to content

Commit 49e32ad

Browse files
authored
add empty check for string and enum serialization in cbor (#584)
1 parent 4114b6e commit 49e32ad

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/serde/cbor/CborSerializerGenerator.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,17 +215,40 @@ private GoWriter.Writable generateSerializeField(MemberShape member) {
215215

216216
var symbol = symbolProvider.toSymbol(member);
217217
return switch (target.getType()) {
218-
case BYTE, SHORT, INTEGER, LONG, FLOAT, DOUBLE, STRING, BOOLEAN, TIMESTAMP ->
218+
case BYTE, SHORT, INTEGER, LONG, FLOAT, DOUBLE, BOOLEAN, TIMESTAMP ->
219219
isPointable(symbol)
220220
? serializeNilableMember(member, target, true)
221221
: serializeMember(member, target);
222222
case BLOB, LIST, SET, MAP, STRUCTURE, UNION ->
223223
serializeNilableMember(member, target, false);
224+
case STRING ->
225+
isPointable(symbol)
226+
? serializeNilableMember(member, target, true)
227+
: serializeString(member, target);
228+
case ENUM ->
229+
serializeString(member, target);
224230
default ->
225231
serializeMember(member, target);
226232
};
227233
}
228234

235+
private GoWriter.Writable serializeString(MemberShape member, Shape target) {
236+
return goTemplate("""
237+
if len(v.$field:L) > 0 {
238+
ser, err := $serialize:L(v.$field:L)
239+
if err != nil {
240+
return nil, err
241+
}
242+
vm[$key:S] = ser
243+
}
244+
""",
245+
MapUtils.of(
246+
"field", symbolProvider.toMemberName(member),
247+
"key", member.getMemberName(),
248+
"serialize", getSerializerName(target)
249+
));
250+
}
251+
229252
private GoWriter.Writable serializeNilableMember(MemberShape member, Shape target, boolean deref) {
230253
return goTemplate("""
231254
if v.$field:L != nil {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy