Skip to content

Commit 14ae7dd

Browse files
committed
Update header serialization to include empty headers
1 parent 894cf94 commit 14ae7dd

File tree

1 file changed

+26
-19
lines changed
  • codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/generators/http

1 file changed

+26
-19
lines changed

codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/generators/http/HttpBindingGenerator.kt

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -617,17 +617,26 @@ class HttpBindingGenerator(
617617
)(this)
618618
}
619619

620-
rustBlock("for ${loopVariable.name} in ${context.valueExpression.asRef()}") {
621-
this.renderHeaderValue(
622-
headerName,
623-
loopVariable,
624-
model.expectShape(shape.member.target),
625-
isMultiValuedHeader = true,
626-
timestampFormat,
627-
renderErrorMessage,
628-
serializeIfDefault = true,
629-
shape.member,
630-
)
620+
rustTemplate(
621+
"""
622+
// Empty vecs in headers are serialized as the empty string
623+
if ${context.valueExpression.asRef()}.is_empty() {
624+
builder = builder.header("$headerName", "");
625+
}""",
626+
)
627+
rustBlock("else") {
628+
rustBlock("for ${loopVariable.name} in ${context.valueExpression.asRef()}") {
629+
this.renderHeaderValue(
630+
headerName,
631+
loopVariable,
632+
model.expectShape(shape.member.target),
633+
isMultiValuedHeader = true,
634+
timestampFormat,
635+
renderErrorMessage,
636+
serializeIfDefault = true,
637+
shape.member,
638+
)
639+
}
631640
}
632641
}
633642

@@ -671,14 +680,12 @@ class HttpBindingGenerator(
671680
val safeName = safeName("formatted")
672681
rustTemplate(
673682
"""
674-
let $safeName = $formatted;
675-
if !$safeName.is_empty() {
676-
let header_value = $safeName;
677-
let header_value: #{HeaderValue} = header_value.parse().map_err(|err| {
678-
#{invalid_field_error:W}
679-
})?;
680-
builder = builder.header("$headerName", header_value);
681-
}
683+
let header_value = $formatted;
684+
let header_value: #{HeaderValue} = header_value.parse().map_err(|err| {
685+
#{invalid_field_error:W}
686+
})?;
687+
builder = builder.header("$headerName", header_value);
688+
682689
""",
683690
"HeaderValue" to RuntimeType.Http.resolve("HeaderValue"),
684691
"invalid_field_error" to renderErrorMessage("header_value"),

0 commit comments

Comments
 (0)