Loading codegen-test/model/rest-json-extras.smithy +7 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,13 @@ structure StringPayloadInput { code: 200, headers: { "x-field": "123" }, params: { field: 123 } }, { id: "DeserPrimitiveHeaderMissing", protocol: "aws.protocols#restJson1", code: 200, headers: { }, params: { field: 0 } } ]) @http(uri: "/primitive", method: "POST") Loading codegen/src/main/kotlin/software/amazon/smithy/rust/codegen/smithy/SymbolVisitor.kt +0 −11 Original line number Diff line number Diff line Loading @@ -38,8 +38,6 @@ import software.amazon.smithy.model.traits.EnumTrait import software.amazon.smithy.model.traits.ErrorTrait import software.amazon.smithy.model.traits.HttpLabelTrait import software.amazon.smithy.rust.codegen.rustlang.RustType import software.amazon.smithy.rust.codegen.rustlang.RustWriter import software.amazon.smithy.rust.codegen.rustlang.Writable import software.amazon.smithy.rust.codegen.rustlang.stripOuter import software.amazon.smithy.rust.codegen.smithy.traits.InputBodyTrait import software.amazon.smithy.rust.codegen.smithy.traits.OutputBodyTrait Loading Loading @@ -315,15 +313,6 @@ sealed class Default { * This symbol should use the Rust `std::default::Default` when unset */ object RustDefault : Default() /** * This symbol has a custom default implementation. This will be written into the block of `or_default(|| <block>)` */ class Custom(val default: Writable) : Default() { fun render(writer: RustWriter) { default(writer) } } } /** Loading codegen/src/main/kotlin/software/amazon/smithy/rust/codegen/smithy/generators/BuilderGenerator.kt +0 −3 Original line number Diff line number Diff line Loading @@ -219,9 +219,6 @@ class BuilderGenerator( ".ok_or(", ")?" ) { missingRequiredField(memberName) } memberSymbol.isOptional() && default is Default.Custom -> { withBlock(".or_else(||Some(", "))") { default.render(this) } } } } } Loading codegen/src/main/kotlin/software/amazon/smithy/rust/codegen/smithy/generators/http/ResponseBindingGenerator.kt +14 −6 Original line number Diff line number Diff line Loading @@ -30,7 +30,9 @@ import software.amazon.smithy.rust.codegen.rustlang.rustBlock import software.amazon.smithy.rust.codegen.rustlang.rustTemplate import software.amazon.smithy.rust.codegen.rustlang.stripOuter import software.amazon.smithy.rust.codegen.rustlang.withBlock import software.amazon.smithy.rust.codegen.smithy.Default import software.amazon.smithy.rust.codegen.smithy.RuntimeType import software.amazon.smithy.rust.codegen.smithy.defaultValue import software.amazon.smithy.rust.codegen.smithy.generators.ProtocolConfig import software.amazon.smithy.rust.codegen.smithy.rustType import software.amazon.smithy.rust.codegen.util.dq Loading Loading @@ -285,13 +287,19 @@ class ResponseBindingGenerator(protocolConfig: ProtocolConfig, private val opera "header_util" to headerUtil ) } else { val fallback = when (symbolProvider.toSymbol(memberShape).defaultValue()) { is Default.RustDefault -> "Ok(Default::default())" is Default.NoDefault -> "Err(${format(headerUtil)}::ParseError)" } rustTemplate( """ if $parsedValue.len() > 1 { Err(#{header_util}::ParseError) } else { return Err(#{header_util}::ParseError) } let mut $parsedValue = $parsedValue; $parsedValue.pop().ok_or(#{header_util}::ParseError) match $parsedValue.pop() { None => $fallback, Some(item) => Ok(item), } """, "header_util" to headerUtil Loading Loading
codegen-test/model/rest-json-extras.smithy +7 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,13 @@ structure StringPayloadInput { code: 200, headers: { "x-field": "123" }, params: { field: 123 } }, { id: "DeserPrimitiveHeaderMissing", protocol: "aws.protocols#restJson1", code: 200, headers: { }, params: { field: 0 } } ]) @http(uri: "/primitive", method: "POST") Loading
codegen/src/main/kotlin/software/amazon/smithy/rust/codegen/smithy/SymbolVisitor.kt +0 −11 Original line number Diff line number Diff line Loading @@ -38,8 +38,6 @@ import software.amazon.smithy.model.traits.EnumTrait import software.amazon.smithy.model.traits.ErrorTrait import software.amazon.smithy.model.traits.HttpLabelTrait import software.amazon.smithy.rust.codegen.rustlang.RustType import software.amazon.smithy.rust.codegen.rustlang.RustWriter import software.amazon.smithy.rust.codegen.rustlang.Writable import software.amazon.smithy.rust.codegen.rustlang.stripOuter import software.amazon.smithy.rust.codegen.smithy.traits.InputBodyTrait import software.amazon.smithy.rust.codegen.smithy.traits.OutputBodyTrait Loading Loading @@ -315,15 +313,6 @@ sealed class Default { * This symbol should use the Rust `std::default::Default` when unset */ object RustDefault : Default() /** * This symbol has a custom default implementation. This will be written into the block of `or_default(|| <block>)` */ class Custom(val default: Writable) : Default() { fun render(writer: RustWriter) { default(writer) } } } /** Loading
codegen/src/main/kotlin/software/amazon/smithy/rust/codegen/smithy/generators/BuilderGenerator.kt +0 −3 Original line number Diff line number Diff line Loading @@ -219,9 +219,6 @@ class BuilderGenerator( ".ok_or(", ")?" ) { missingRequiredField(memberName) } memberSymbol.isOptional() && default is Default.Custom -> { withBlock(".or_else(||Some(", "))") { default.render(this) } } } } } Loading
codegen/src/main/kotlin/software/amazon/smithy/rust/codegen/smithy/generators/http/ResponseBindingGenerator.kt +14 −6 Original line number Diff line number Diff line Loading @@ -30,7 +30,9 @@ import software.amazon.smithy.rust.codegen.rustlang.rustBlock import software.amazon.smithy.rust.codegen.rustlang.rustTemplate import software.amazon.smithy.rust.codegen.rustlang.stripOuter import software.amazon.smithy.rust.codegen.rustlang.withBlock import software.amazon.smithy.rust.codegen.smithy.Default import software.amazon.smithy.rust.codegen.smithy.RuntimeType import software.amazon.smithy.rust.codegen.smithy.defaultValue import software.amazon.smithy.rust.codegen.smithy.generators.ProtocolConfig import software.amazon.smithy.rust.codegen.smithy.rustType import software.amazon.smithy.rust.codegen.util.dq Loading Loading @@ -285,13 +287,19 @@ class ResponseBindingGenerator(protocolConfig: ProtocolConfig, private val opera "header_util" to headerUtil ) } else { val fallback = when (symbolProvider.toSymbol(memberShape).defaultValue()) { is Default.RustDefault -> "Ok(Default::default())" is Default.NoDefault -> "Err(${format(headerUtil)}::ParseError)" } rustTemplate( """ if $parsedValue.len() > 1 { Err(#{header_util}::ParseError) } else { return Err(#{header_util}::ParseError) } let mut $parsedValue = $parsedValue; $parsedValue.pop().ok_or(#{header_util}::ParseError) match $parsedValue.pop() { None => $fallback, Some(item) => Ok(item), } """, "header_util" to headerUtil Loading