Skip to content

Commit ad119f6

Browse files
drganjooFahad Zubairaws-sdk-rust-circohdavid-perez
authored
Use std::result::Result instead of Result (#4010)
When the model contains a shape by the name of `Result`, the generated code fails to compile. For instance the following model fails: ```smithy @restJson1 service ConstrainedService { operations: [SampleOperation] } @http(uri: "/anOperation", method: "POST") operation SampleOperation { output: SampleInputOutput input: SampleInputOutput errors: [ValidationException] } structure SampleInputOutput { result: Result } structure Result { @pattern("^a-z$") chat: String } ``` This PR ensures: 1. If `rustTemplate` is being used, then `#{Result}` is used 2. If `rust` is being used, then that is changed to `rustTemplate` and then `#{Result}` is used. 3. If `rustBlock` is being used, then the generated code should use `std::result::Result` --------- Co-authored-by: Fahad Zubair <fahadzub@amazon.com> Co-authored-by: AWS SDK Rust Bot <aws-sdk-rust-primary@amazon.com> Co-authored-by: Russell Cohen <rcoh@amazon.com> Co-authored-by: david-perez <d@vidp.dev> Co-authored-by: Landon James <lnj@amazon.com>
1 parent 891a82b commit ad119f6

File tree

35 files changed

+120
-78
lines changed

35 files changed

+120
-78
lines changed

aws/sdk-codegen/src/main/kotlin/software/amazon/smithy/rustsdk/customize/timestream/TimestreamDecorator.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import software.amazon.smithy.rust.codegen.core.rustlang.Visibility
1515
import software.amazon.smithy.rust.codegen.core.rustlang.rustTemplate
1616
import software.amazon.smithy.rust.codegen.core.rustlang.toType
1717
import software.amazon.smithy.rust.codegen.core.smithy.RuntimeType
18+
import software.amazon.smithy.rust.codegen.core.smithy.RuntimeType.Companion.std
1819
import software.amazon.smithy.rust.codegen.core.smithy.RustCrate
1920
import software.amazon.smithy.rust.codegen.core.smithy.customize.AdHocCustomization
2021
import software.amazon.smithy.rust.codegen.core.smithy.customize.adhocCustomization
@@ -60,7 +61,7 @@ class TimestreamDecorator : ClientCodegenDecorator {
6061
// helper function to resolve an endpoint given a base client
6162
rustTemplate(
6263
"""
63-
async fn resolve_endpoint(client: &crate::Client) -> Result<(#{Endpoint}, #{SystemTime}), #{BoxError}> {
64+
async fn resolve_endpoint(client: &crate::Client) -> #{Result}<(#{Endpoint}, #{SystemTime}), #{BoxError}> {
6465
let describe_endpoints =
6566
client.describe_endpoints().send().await?;
6667
let endpoint = describe_endpoints.endpoints().first().unwrap();

codegen-client/src/main/kotlin/software/amazon/smithy/rust/codegen/client/smithy/endpoint/generators/EndpointResolverGenerator.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ internal class EndpointResolverGenerator(
140140
"EndpointError" to types.resolveEndpointError,
141141
"ServiceSpecificEndpointResolver" to codegenContext.serviceSpecificEndpointResolver(),
142142
"DiagnosticCollector" to EndpointsLib.DiagnosticCollector,
143+
*preludeScope,
143144
)
144145

145146
private val allowLintsForResolver =
@@ -195,7 +196,7 @@ internal class EndpointResolverGenerator(
195196
Self { #{custom_fields_init:W} }
196197
}
197198
198-
fn resolve_endpoint(&self, params: &#{Params}) -> Result<#{SmithyEndpoint}, #{BoxError}> {
199+
fn resolve_endpoint(&self, params: &#{Params}) -> #{Result}<#{SmithyEndpoint}, #{BoxError}> {
199200
let mut diagnostic_collector = #{DiagnosticCollector}::new();
200201
Ok(#{resolver_fn}(params, &mut diagnostic_collector, #{additional_args})
201202
.map_err(|err|err.with_source(diagnostic_collector.take_last_error()))?)

codegen-client/src/main/kotlin/software/amazon/smithy/rust/codegen/client/smithy/generators/client/FluentClientGenerator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ class FluentClientGenerator(
148148
&self.handle.conf
149149
}
150150
151-
fn validate_config(handle: &Handle) -> Result<(), #{BoxError}> {
151+
fn validate_config(handle: &Handle) -> #{Result}<(), #{BoxError}> {
152152
let mut cfg = #{ConfigBag}::base();
153153
handle.runtime_plugins
154154
.apply_client_configuration(&mut cfg)?

codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/AwsJson.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ class AwsJsonSerializerGenerator(
103103
arrayOf(
104104
"Error" to runtimeConfig.serializationError(),
105105
"SdkBody" to RuntimeType.sdkBody(runtimeConfig),
106+
*RuntimeType.preludeScope,
106107
)
107108
private val protocolFunctions = ProtocolFunctions(codegenContext)
108109

@@ -113,7 +114,7 @@ class AwsJsonSerializerGenerator(
113114
serializer =
114115
protocolFunctions.serializeFn(operationShape, fnNameSuffix = "input") { fnName ->
115116
rustBlockTemplate(
116-
"pub fn $fnName(_input: &#{target}) -> Result<#{SdkBody}, #{Error}>",
117+
"pub fn $fnName(_input: &#{target}) -> #{Result}<#{SdkBody}, #{Error}>",
117118
*codegenScope, "target" to codegenContext.symbolProvider.toSymbol(inputShape),
118119
) {
119120
rustTemplate("""Ok(#{SdkBody}::from("{}"))""", *codegenScope)
@@ -138,6 +139,7 @@ open class AwsJson(
138139
CargoDependency.smithyJson(runtimeConfig).toType()
139140
.resolve("deserialize::error::DeserializeError"),
140141
"json_errors" to RuntimeType.jsonErrors(runtimeConfig),
142+
*RuntimeType.preludeScope,
141143
)
142144

143145
val version: AwsJsonVersion get() = awsJsonVersion
@@ -164,7 +166,7 @@ open class AwsJson(
164166
ProtocolFunctions.crossOperationFn("parse_http_error_metadata") { fnName ->
165167
rustTemplate(
166168
"""
167-
pub fn $fnName(_response_status: u16, response_headers: &#{Headers}, response_body: &[u8]) -> Result<#{ErrorMetadataBuilder}, #{JsonError}> {
169+
pub fn $fnName(_response_status: u16, response_headers: &#{Headers}, response_body: &[u8]) -> #{Result}<#{ErrorMetadataBuilder}, #{JsonError}> {
168170
#{json_errors}::parse_error_metadata(response_body, response_headers)
169171
}
170172
""",
@@ -177,7 +179,7 @@ open class AwsJson(
177179
// `HeaderMap::new()` doesn't allocate.
178180
rustTemplate(
179181
"""
180-
pub fn $fnName(payload: &#{Bytes}) -> Result<#{ErrorMetadataBuilder}, #{JsonError}> {
182+
pub fn $fnName(payload: &#{Bytes}) -> #{Result}<#{ErrorMetadataBuilder}, #{JsonError}> {
181183
#{json_errors}::parse_error_metadata(payload, &#{Headers}::new())
182184
}
183185
""",

codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/AwsQuery.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class AwsQueryProtocol(private val codegenContext: CodegenContext) : Protocol {
4646
"ErrorMetadataBuilder" to RuntimeType.errorMetadataBuilder(runtimeConfig),
4747
"Headers" to RuntimeType.headers(runtimeConfig),
4848
"XmlDecodeError" to RuntimeType.smithyXml(runtimeConfig).resolve("decode::XmlDecodeError"),
49+
*RuntimeType.preludeScope,
4950
)
5051

5152
override val httpBindingResolver: HttpBindingResolver = AwsQueryBindingResolver(codegenContext.model)
@@ -61,7 +62,7 @@ class AwsQueryProtocol(private val codegenContext: CodegenContext) : Protocol {
6162
override fun parseHttpErrorMetadata(operationShape: OperationShape): RuntimeType =
6263
ProtocolFunctions.crossOperationFn("parse_http_error_metadata") { fnName ->
6364
rustBlockTemplate(
64-
"pub fn $fnName(_response_status: u16, _response_headers: &#{Headers}, response_body: &[u8]) -> Result<#{ErrorMetadataBuilder}, #{XmlDecodeError}>",
65+
"pub fn $fnName(_response_status: u16, _response_headers: &#{Headers}, response_body: &[u8]) -> #{Result}<#{ErrorMetadataBuilder}, #{XmlDecodeError}>",
6566
*errorScope,
6667
) {
6768
rust("#T::parse_error_metadata(response_body)", awsQueryErrors)
@@ -71,7 +72,7 @@ class AwsQueryProtocol(private val codegenContext: CodegenContext) : Protocol {
7172
override fun parseEventStreamErrorMetadata(operationShape: OperationShape): RuntimeType =
7273
ProtocolFunctions.crossOperationFn("parse_event_stream_error_metadata") { fnName ->
7374
rustBlockTemplate(
74-
"pub fn $fnName(payload: &#{Bytes}) -> Result<#{ErrorMetadataBuilder}, #{XmlDecodeError}>",
75+
"pub fn $fnName(payload: &#{Bytes}) -> #{Result}<#{ErrorMetadataBuilder}, #{XmlDecodeError}>",
7576
*errorScope,
7677
) {
7778
rust("#T::parse_error_metadata(payload.as_ref())", awsQueryErrors)

codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/AwsQueryCompatible.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ class AwsQueryCompatible(
5959
.resolve("deserialize::error::DeserializeError"),
6060
"aws_query_compatible_errors" to RuntimeType.awsQueryCompatibleErrors(runtimeConfig),
6161
"json_errors" to RuntimeType.jsonErrors(runtimeConfig),
62+
*RuntimeType.preludeScope,
6263
)
6364

6465
override val httpBindingResolver: HttpBindingResolver =
@@ -77,7 +78,7 @@ class AwsQueryCompatible(
7778
ProtocolFunctions.crossOperationFn("parse_http_error_metadata") { fnName ->
7879
rustTemplate(
7980
"""
80-
pub fn $fnName(_response_status: u16, response_headers: &#{Headers}, response_body: &[u8]) -> Result<#{ErrorMetadataBuilder}, #{JsonError}> {
81+
pub fn $fnName(_response_status: u16, response_headers: &#{Headers}, response_body: &[u8]) -> #{Result}<#{ErrorMetadataBuilder}, #{JsonError}> {
8182
let mut builder =
8283
#{json_errors}::parse_error_metadata(response_body, response_headers)?;
8384
if let Some((error_code, error_type)) =

codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/Ec2Query.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class Ec2QueryProtocol(private val codegenContext: CodegenContext) : Protocol {
2727
"ErrorMetadataBuilder" to RuntimeType.errorMetadataBuilder(runtimeConfig),
2828
"Headers" to RuntimeType.headers(runtimeConfig),
2929
"XmlDecodeError" to RuntimeType.smithyXml(runtimeConfig).resolve("decode::XmlDecodeError"),
30+
*RuntimeType.preludeScope,
3031
)
3132

3233
override val httpBindingResolver: HttpBindingResolver =
@@ -52,7 +53,7 @@ class Ec2QueryProtocol(private val codegenContext: CodegenContext) : Protocol {
5253
override fun parseHttpErrorMetadata(operationShape: OperationShape): RuntimeType =
5354
ProtocolFunctions.crossOperationFn("parse_http_error_metadata") { fnName ->
5455
rustBlockTemplate(
55-
"pub fn $fnName(_response_status: u16, _response_headers: &#{Headers}, response_body: &[u8]) -> Result<#{ErrorMetadataBuilder}, #{XmlDecodeError}>",
56+
"pub fn $fnName(_response_status: u16, _response_headers: &#{Headers}, response_body: &[u8]) -> #{Result}<#{ErrorMetadataBuilder}, #{XmlDecodeError}>",
5657
*errorScope,
5758
) {
5859
rust("#T::parse_error_metadata(response_body)", ec2QueryErrors)
@@ -62,7 +63,7 @@ class Ec2QueryProtocol(private val codegenContext: CodegenContext) : Protocol {
6263
override fun parseEventStreamErrorMetadata(operationShape: OperationShape): RuntimeType =
6364
ProtocolFunctions.crossOperationFn("parse_event_stream_error_metadata") {
6465
rustBlockTemplate(
65-
"pub fn parse_event_stream_error_metadata(payload: &#{Bytes}) -> Result<#{ErrorMetadataBuilder}, #{XmlDecodeError}>",
66+
"pub fn parse_event_stream_error_metadata(payload: &#{Bytes}) -> #{Result}<#{ErrorMetadataBuilder}, #{XmlDecodeError}>",
6667
*errorScope,
6768
) {
6869
rust("#T::parse_error_metadata(payload.as_ref())", ec2QueryErrors)

codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/HttpBoundProtocolPayloadGenerator.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ class HttpBoundProtocolPayloadGenerator(
6969
"BuildError" to runtimeConfig.operationBuildError(),
7070
"SmithyHttp" to RuntimeType.smithyHttp(runtimeConfig),
7171
"NoOpSigner" to smithyEventStream.resolve("frame::NoOpSigner"),
72+
*RuntimeType.preludeScope,
7273
)
7374
private val protocolFunctions = ProtocolFunctions(codegenContext)
7475

@@ -300,7 +301,7 @@ class HttpBoundProtocolPayloadGenerator(
300301
RuntimeType.ByteSlab.toSymbol()
301302
}
302303
rustBlockTemplate(
303-
"pub fn $fnName(payload: $ref#{Member}) -> Result<#{outputT}, #{BuildError}>",
304+
"pub fn $fnName(payload: $ref#{Member}) -> #{Result}<#{outputT}, #{BuildError}>",
304305
"Member" to symbolProvider.toSymbol(member),
305306
"outputT" to outputT,
306307
*codegenScope,

codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/RestJson.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ open class RestJson(val codegenContext: CodegenContext) : Protocol {
7777
CargoDependency.smithyJson(runtimeConfig).toType()
7878
.resolve("deserialize::error::DeserializeError"),
7979
"json_errors" to RuntimeType.jsonErrors(runtimeConfig),
80+
*RuntimeType.preludeScope,
8081
)
8182

8283
override val httpBindingResolver: HttpBindingResolver =
@@ -120,7 +121,7 @@ open class RestJson(val codegenContext: CodegenContext) : Protocol {
120121
ProtocolFunctions.crossOperationFn("parse_http_error_metadata") { fnName ->
121122
rustTemplate(
122123
"""
123-
pub fn $fnName(_response_status: u16, response_headers: &#{Headers}, response_body: &[u8]) -> Result<#{ErrorMetadataBuilder}, #{JsonError}> {
124+
pub fn $fnName(_response_status: u16, response_headers: &#{Headers}, response_body: &[u8]) -> #{Result}<#{ErrorMetadataBuilder}, #{JsonError}> {
124125
#{json_errors}::parse_error_metadata(response_body, response_headers)
125126
}
126127
""",
@@ -133,7 +134,7 @@ open class RestJson(val codegenContext: CodegenContext) : Protocol {
133134
// `HeaderMap::new()` doesn't allocate.
134135
rustTemplate(
135136
"""
136-
pub fn $fnName(payload: &#{Bytes}) -> Result<#{ErrorMetadataBuilder}, #{JsonError}> {
137+
pub fn $fnName(payload: &#{Bytes}) -> #{Result}<#{ErrorMetadataBuilder}, #{JsonError}> {
137138
#{json_errors}::parse_error_metadata(payload, &#{Headers}::new())
138139
}
139140
""",

codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/RestXml.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ open class RestXml(val codegenContext: CodegenContext) : Protocol {
2727
"ErrorMetadataBuilder" to RuntimeType.errorMetadataBuilder(runtimeConfig),
2828
"Headers" to RuntimeType.headers(runtimeConfig),
2929
"XmlDecodeError" to RuntimeType.smithyXml(runtimeConfig).resolve("decode::XmlDecodeError"),
30+
*RuntimeType.preludeScope,
3031
)
3132

3233
protected val restXmlErrors: RuntimeType =
@@ -58,7 +59,7 @@ open class RestXml(val codegenContext: CodegenContext) : Protocol {
5859
override fun parseHttpErrorMetadata(operationShape: OperationShape): RuntimeType =
5960
ProtocolFunctions.crossOperationFn("parse_http_error_metadata") { fnName ->
6061
rustBlockTemplate(
61-
"pub fn $fnName(_response_status: u16, _response_headers: &#{Headers}, response_body: &[u8]) -> Result<#{ErrorMetadataBuilder}, #{XmlDecodeError}>",
62+
"pub fn $fnName(_response_status: u16, _response_headers: &#{Headers}, response_body: &[u8]) -> #{Result}<#{ErrorMetadataBuilder}, #{XmlDecodeError}>",
6263
*errorScope,
6364
) {
6465
rust("#T::parse_error_metadata(response_body)", restXmlErrors)
@@ -68,7 +69,7 @@ open class RestXml(val codegenContext: CodegenContext) : Protocol {
6869
override fun parseEventStreamErrorMetadata(operationShape: OperationShape): RuntimeType =
6970
ProtocolFunctions.crossOperationFn("parse_event_stream_error_metadata") { fnName ->
7071
rustBlockTemplate(
71-
"pub fn $fnName(payload: &#{Bytes}) -> Result<#{ErrorMetadataBuilder}, #{XmlDecodeError}>",
72+
"pub fn $fnName(payload: &#{Bytes}) -> #{Result}<#{ErrorMetadataBuilder}, #{XmlDecodeError}>",
7273
*errorScope,
7374
) {
7475
rust("#T::parse_error_metadata(payload.as_ref())", restXmlErrors)

0 commit comments

Comments
 (0)