From 17ab7ffa0306c78c40c0b6ac963d5666eef2ca26 Mon Sep 17 00:00:00 2001 From: Thomas Cameron Date: Fri, 21 Apr 2023 08:39:10 +0000 Subject: [PATCH 1/5] serde support for error metadata --- .../aws-smithy-types/src/error/metadata.rs | 56 +++++++++++++++++++ .../test_data/error_meta_data.json | 7 +++ .../test_data/error_meta_data_empty.json | 5 ++ 3 files changed, 68 insertions(+) create mode 100644 rust-runtime/aws-smithy-types/test_data/error_meta_data.json create mode 100644 rust-runtime/aws-smithy-types/test_data/error_meta_data_empty.json diff --git a/rust-runtime/aws-smithy-types/src/error/metadata.rs b/rust-runtime/aws-smithy-types/src/error/metadata.rs index 06925e13f9..70fdc999d7 100644 --- a/rust-runtime/aws-smithy-types/src/error/metadata.rs +++ b/rust-runtime/aws-smithy-types/src/error/metadata.rs @@ -39,6 +39,14 @@ pub const EMPTY_ERROR_METADATA: ErrorMetadata = ErrorMetadata { /// For many services, Errors are modeled. However, many services only partially model errors or don't /// model errors at all. In these cases, the SDK will return this generic error type to expose the /// `code`, `message` and `request_id`. +#[cfg_attr( + all(aws_sdk_unstable, feature = "serde-serialize"), + derive(serde::Serialize) +)] +#[cfg_attr( + all(aws_sdk_unstable, feature = "serde-deserialize"), + derive(serde::Deserialize) +)] #[derive(Debug, Eq, PartialEq, Default, Clone)] pub struct ErrorMetadata { code: Option, @@ -47,8 +55,23 @@ pub struct ErrorMetadata { } /// Builder for [`ErrorMetadata`]. +#[cfg_attr( + all(aws_sdk_unstable, feature = "serde-serialize"), + derive(serde::Serialize) +)] +#[cfg_attr( + all(aws_sdk_unstable, feature = "serde-deserialize"), + derive(serde::Deserialize) +)] #[derive(Debug, Default)] pub struct Builder { + #[cfg_attr( + any( + all(aws_sdk_unstable, feature = "serde-deserialize"), + all(aws_sdk_unstable, feature = "serde-serialize") + ), + serde(flatten) + )] inner: ErrorMetadata, } @@ -164,3 +187,36 @@ impl fmt::Display for ErrorMetadata { } impl std::error::Error for ErrorMetadata {} + +#[cfg(all( + test, + any( + all(aws_sdk_unstable, feature = "serde-deserialize"), + all(aws_sdk_unstable, feature = "serde-serialize") + ) +))] +mod test { + use super::*; + + #[test] + /// tests de/ser on ErrorMetaData. + fn test_error_meta_data() { + let mut data = Builder::default() + .code("code") + .message("message") + .custom("hello", "world"); + let ok = serde_json::to_string_pretty(&EMPTY_ERROR_METADATA).unwrap(); + assert_eq!( + &ok, + include_str!("../../test-data/error_meta_data_empty.json") + ); + assert_eq!( + serde_json::from_str(include_str!("../../test-data/error_meta_data.json")).unwrap(), + &data + ); + assert_eq!( + serde_json::from_str(include_str!("../../test-data/error_meta_data.json")).unwrap(), + data.build() + ); + } +} diff --git a/rust-runtime/aws-smithy-types/test_data/error_meta_data.json b/rust-runtime/aws-smithy-types/test_data/error_meta_data.json new file mode 100644 index 0000000000..db7067d86e --- /dev/null +++ b/rust-runtime/aws-smithy-types/test_data/error_meta_data.json @@ -0,0 +1,7 @@ +{ + "code": "code", + "message": "message", + "extras": { + "hello": "world" + } +} diff --git a/rust-runtime/aws-smithy-types/test_data/error_meta_data_empty.json b/rust-runtime/aws-smithy-types/test_data/error_meta_data_empty.json new file mode 100644 index 0000000000..41165f4a49 --- /dev/null +++ b/rust-runtime/aws-smithy-types/test_data/error_meta_data_empty.json @@ -0,0 +1,5 @@ +{ + "code": null, + "message": null, + "extras": null +} From 81ccbbf992735930d358a54259e06116e34afa7a Mon Sep 17 00:00:00 2001 From: Thomas Cameron Date: Wed, 26 Apr 2023 11:09:48 +0000 Subject: [PATCH 2/5] chore: update CHANGELOG.next.toml --- CHANGELOG.next.toml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.next.toml b/CHANGELOG.next.toml index 1832de5613..3856c9e46d 100644 --- a/CHANGELOG.next.toml +++ b/CHANGELOG.next.toml @@ -11,6 +11,13 @@ # meta = { "breaking" = false, "tada" = false, "bug" = false, "target" = "client | server | all"} # author = "rcoh" + +[[aws-sdk-rust]] +message = "Implements serde support for ErrorMetaData on aws-smithy-types crate." +references = ["smithy-rs#2637"] +meta = { "breaking" = false, "tada" = false, "bug" = true } +author = "thomas-k-cameron" + [[aws-sdk-rust]] message = "The outputs for event stream operations (for example, S3's SelectObjectContent) now implement the `Sync` auto-trait." references = ["smithy-rs#2496"] From 5747deb8a069ca3451c162c8713ce27dba7da6fa Mon Sep 17 00:00:00 2001 From: Thomas Cameron Date: Wed, 26 Apr 2023 11:10:27 +0000 Subject: [PATCH 3/5] Merge commit 'eef5b35a22c4f3c70a7e2387c2cf129da637ef3f' --- buildSrc/src/main/kotlin/CodegenTestCommon.kt | 4 ++++ buildSrc/src/main/kotlin/RustBuildTool.kt | 1 + 2 files changed, 5 insertions(+) diff --git a/buildSrc/src/main/kotlin/CodegenTestCommon.kt b/buildSrc/src/main/kotlin/CodegenTestCommon.kt index 2173c237a6..e42d7e5ed2 100644 --- a/buildSrc/src/main/kotlin/CodegenTestCommon.kt +++ b/buildSrc/src/main/kotlin/CodegenTestCommon.kt @@ -244,12 +244,14 @@ fun Project.registerCargoCommandsTasks( this.tasks.register(Cargo.CHECK.toString) { dependsOn(dependentTasks) workingDir(outputDir) + environment("RUSTFLAGS", "--cfg aws_sdk_unstable") commandLine("cargo", "check", "--lib", "--tests", "--benches", "--all-features") } this.tasks.register(Cargo.TEST.toString) { dependsOn(dependentTasks) workingDir(outputDir) + environment("RUSTFLAGS", "--cfg aws_sdk_unstable") commandLine("cargo", "test", "--all-features") } @@ -257,12 +259,14 @@ fun Project.registerCargoCommandsTasks( dependsOn(dependentTasks) workingDir(outputDir) environment("RUSTDOCFLAGS", defaultRustDocFlags) + environment("RUSTFLAGS", "--cfg aws_sdk_unstable") commandLine("cargo", "doc", "--no-deps", "--document-private-items") } this.tasks.register(Cargo.CLIPPY.toString) { dependsOn(dependentTasks) workingDir(outputDir) + environment("RUSTFLAGS", "--cfg aws_sdk_unstable") commandLine("cargo", "clippy") } } diff --git a/buildSrc/src/main/kotlin/RustBuildTool.kt b/buildSrc/src/main/kotlin/RustBuildTool.kt index 1e67995648..b8a1a15fb1 100644 --- a/buildSrc/src/main/kotlin/RustBuildTool.kt +++ b/buildSrc/src/main/kotlin/RustBuildTool.kt @@ -28,6 +28,7 @@ private fun runCli( } } .copyTo(action) + action.environment("RUSTFLAGS", "--cfg aws_sdk_unstable") action.execute() } } From 6edcd1a418d73c1a6b4244bace78856d5d1a2fa5 Mon Sep 17 00:00:00 2001 From: Thomas Cameron Date: Wed, 26 Apr 2023 11:19:21 +0000 Subject: [PATCH 4/5] chore: update CHANGELOG.next.toml --- CHANGELOG.next.toml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.next.toml b/CHANGELOG.next.toml index 29b405f52a..dbb4772750 100644 --- a/CHANGELOG.next.toml +++ b/CHANGELOG.next.toml @@ -11,12 +11,6 @@ # meta = { "breaking" = false, "tada" = false, "bug" = false, "target" = "client | server | all"} # author = "rcoh" -[[aws-sdk-rust]] -message = "Implements serde support for ErrorMetaData on aws-smithy-types crate." -references = ["smithy-rs#2637"] -meta = { "breaking" = false, "tada" = false, "bug" = true } -author = "thomas-k-cameron" - [[smithy-rs]] message = """ Implement layer for servers to handle [ALB health checks](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html). @@ -177,3 +171,9 @@ message = "Update MSRV to Rust 1.67.1" references = ["smithy-rs#2611"] meta = { "breaking" = true, "tada" = false, "bug" = false, "target" = "all"} author = "jdisanti" + +[[smithy-rs]] +message = "Add RUSTFLAGS = aws_sdk_unstable as environment variable when running Cargo from kotlin." +references = ["smithy-rs#2614"] +meta = { "breaking" = true, "tada" = false, "bug" = false, "target" = "all"} +author = "thomas-k-cameron" From ce9f011bb2e79187e250476844b4e9b95a86dda6 Mon Sep 17 00:00:00 2001 From: Thomas Cameron <68596478+thomas-k-cameron@users.noreply.github.com> Date: Wed, 26 Apr 2023 22:20:08 +0900 Subject: [PATCH 5/5] Update CHANGELOG.next.toml --- CHANGELOG.next.toml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/CHANGELOG.next.toml b/CHANGELOG.next.toml index dbb4772750..a03141576a 100644 --- a/CHANGELOG.next.toml +++ b/CHANGELOG.next.toml @@ -171,9 +171,3 @@ message = "Update MSRV to Rust 1.67.1" references = ["smithy-rs#2611"] meta = { "breaking" = true, "tada" = false, "bug" = false, "target" = "all"} author = "jdisanti" - -[[smithy-rs]] -message = "Add RUSTFLAGS = aws_sdk_unstable as environment variable when running Cargo from kotlin." -references = ["smithy-rs#2614"] -meta = { "breaking" = true, "tada" = false, "bug" = false, "target" = "all"} -author = "thomas-k-cameron"