From e447a22794d904d3b76567219c55e8a250f82a82 Mon Sep 17 00:00:00 2001 From: ysaito1001 Date: Thu, 19 Oct 2023 13:38:25 -0500 Subject: [PATCH] Re-point those using `BuildError` from smithy-http to smithy-types (#3070) ## Motivation and Context Completes #3054 (a follow-up on #3032) ## Description #3032 moved `BuildError` from `aws_smithy_http::operation::error` to `aws_smithy_types::error::operation`. That PR also left "breadcrumbs", so that customers could still consume `BuldError` from `aws_smithy_http` after the move. This PR turns breadcrumbs into deprecation messages (via `#[deprecated(...)]`) and updates existing places that used to use moved types from `aws_smithy_http` to `aws_smithy_types`. ## Testing Relied on tests in CI. ## Checklist - [x] I have updated `CHANGELOG.next.toml` if I made changes to the smithy-rs codegen or runtime crates ---- _By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._ --------- Co-authored-by: Russell Cohen --- CHANGELOG.next.toml | 8 ++++++++ aws/rust-runtime/aws-inlineable/Cargo.toml | 4 ++-- .../aws-inlineable/src/http_request_checksum.rs | 2 +- .../s3/tests/required-query-params.rs | 2 +- .../core/smithy/generators/BuilderGenerator.kt | 4 ++-- .../src/protocol/aws_json/rejection.rs | 2 +- .../src/protocol/rest_json_1/rejection.rs | 4 ++-- .../src/protocol/rest_xml/rejection.rs | 4 ++-- rust-runtime/aws-smithy-http/src/operation.rs | 12 +++++++++--- 9 files changed, 28 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.next.toml b/CHANGELOG.next.toml index c17e89a4c..b91b0009a 100644 --- a/CHANGELOG.next.toml +++ b/CHANGELOG.next.toml @@ -426,3 +426,11 @@ message = "**This change has [detailed upgrade guidance](https://github.com/awsl references = ["smithy-rs#3043", "smithy-rs#3078"] meta = { "breaking" = true, "tada" = false, "bug" = false, "target" = "client" } author = "rcoh" + +[[smithy-rs]] +message = """ +`aws_smithy_http::operation::error::{BuildError, SerializationError}` have been moved to `aws_smithy_types::error::operation::{BuildError, SerializationError}`. Type aliases for them are left in `aws_smithy_http` for backwards compatibility but are deprecated. +""" +references = ["smithy-rs#3054", "smithy-rs#3070"] +meta = { "breaking" = true, "tada" = false, "bug" = false, "target" = "all" } +author = "ysaito1001" diff --git a/aws/rust-runtime/aws-inlineable/Cargo.toml b/aws/rust-runtime/aws-inlineable/Cargo.toml index 56ccc8068..2e902d277 100644 --- a/aws/rust-runtime/aws-inlineable/Cargo.toml +++ b/aws/rust-runtime/aws-inlineable/Cargo.toml @@ -16,12 +16,12 @@ aws-credential-types = { path = "../aws-credential-types" } aws-http = { path = "../aws-http" } aws-runtime = { path = "../aws-runtime" } aws-sigv4 = { path = "../aws-sigv4" } +aws-smithy-async = { path = "../../../rust-runtime/aws-smithy-async", features = ["rt-tokio"] } aws-smithy-checksums = { path = "../../../rust-runtime/aws-smithy-checksums" } aws-smithy-http = { path = "../../../rust-runtime/aws-smithy-http" } -aws-smithy-runtime-api = { path = "../../../rust-runtime/aws-smithy-runtime-api", features = ["client"] } aws-smithy-runtime = { path = "../../../rust-runtime/aws-smithy-runtime", features = ["client"] } +aws-smithy-runtime-api = { path = "../../../rust-runtime/aws-smithy-runtime-api", features = ["client"] } aws-smithy-types = { path = "../../../rust-runtime/aws-smithy-types" } -aws-smithy-async = { path = "../../../rust-runtime/aws-smithy-async", features = ["rt-tokio"] } bytes = "1" hex = "0.4.3" http = "0.2.9" diff --git a/aws/rust-runtime/aws-inlineable/src/http_request_checksum.rs b/aws/rust-runtime/aws-inlineable/src/http_request_checksum.rs index 3dc9cd449..b3a6f059b 100644 --- a/aws/rust-runtime/aws-inlineable/src/http_request_checksum.rs +++ b/aws/rust-runtime/aws-inlineable/src/http_request_checksum.rs @@ -13,7 +13,6 @@ use aws_sigv4::http_request::SignableBody; use aws_smithy_checksums::ChecksumAlgorithm; use aws_smithy_checksums::{body::calculate, http::HttpChecksum}; use aws_smithy_http::body::{BoxBody, SdkBody}; -use aws_smithy_http::operation::error::BuildError; use aws_smithy_runtime_api::box_error::BoxError; use aws_smithy_runtime_api::client::interceptors::context::{ BeforeSerializationInterceptorContextRef, BeforeTransmitInterceptorContextMut, Input, @@ -23,6 +22,7 @@ use aws_smithy_runtime_api::client::interceptors::Intercept; use aws_smithy_runtime_api::client::orchestrator::HttpRequest; use aws_smithy_runtime_api::client::runtime_components::RuntimeComponents; use aws_smithy_types::config_bag::{ConfigBag, Layer, Storable, StoreReplace}; +use aws_smithy_types::error::operation::BuildError; use http::HeaderValue; use http_body::Body; use std::{fmt, mem}; diff --git a/aws/sdk/integration-tests/s3/tests/required-query-params.rs b/aws/sdk/integration-tests/s3/tests/required-query-params.rs index 1df7f44e4..d9604260e 100644 --- a/aws/sdk/integration-tests/s3/tests/required-query-params.rs +++ b/aws/sdk/integration-tests/s3/tests/required-query-params.rs @@ -6,8 +6,8 @@ use aws_sdk_s3::config::{Credentials, Region}; use aws_sdk_s3::error::DisplayErrorContext; use aws_sdk_s3::Client; -use aws_smithy_http::operation::error::BuildError; use aws_smithy_runtime::client::http::test_util::capture_request; +use aws_smithy_types::error::operation::BuildError; #[tokio::test] async fn test_error_when_required_query_param_is_unset() { diff --git a/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/generators/BuilderGenerator.kt b/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/generators/BuilderGenerator.kt index 80b9329d6..936942375 100644 --- a/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/generators/BuilderGenerator.kt +++ b/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/generators/BuilderGenerator.kt @@ -75,8 +75,8 @@ sealed class BuilderSection(name: String) : Section(name) { /** Customizations for BuilderGenerator */ abstract class BuilderCustomization : NamedCustomization() -fun RuntimeConfig.operationBuildError() = RuntimeType.operationModule(this).resolve("error::BuildError") -fun RuntimeConfig.serializationError() = RuntimeType.operationModule(this).resolve("error::SerializationError") +fun RuntimeConfig.operationBuildError() = RuntimeType.smithyTypes(this).resolve("error::operation::BuildError") +fun RuntimeConfig.serializationError() = RuntimeType.smithyTypes(this).resolve("error::operation::SerializationError") fun MemberShape.enforceRequired( field: Writable, diff --git a/rust-runtime/aws-smithy-http-server/src/protocol/aws_json/rejection.rs b/rust-runtime/aws-smithy-http-server/src/protocol/aws_json/rejection.rs index 491e865dd..514b06da6 100644 --- a/rust-runtime/aws-smithy-http-server/src/protocol/aws_json/rejection.rs +++ b/rust-runtime/aws-smithy-http-server/src/protocol/aws_json/rejection.rs @@ -9,7 +9,7 @@ use thiserror::Error; #[derive(Debug, Error)] pub enum ResponseRejection { #[error("error serializing JSON-encoded body: {0}")] - Serialization(#[from] aws_smithy_http::operation::error::SerializationError), + Serialization(#[from] aws_smithy_types::error::operation::SerializationError), #[error("error building HTTP response: {0}")] HttpBuild(#[from] http::Error), } diff --git a/rust-runtime/aws-smithy-http-server/src/protocol/rest_json_1/rejection.rs b/rust-runtime/aws-smithy-http-server/src/protocol/rest_json_1/rejection.rs index 8577d4a55..963b56c4c 100644 --- a/rust-runtime/aws-smithy-http-server/src/protocol/rest_json_1/rejection.rs +++ b/rust-runtime/aws-smithy-http-server/src/protocol/rest_json_1/rejection.rs @@ -67,7 +67,7 @@ pub enum ResponseRejection { /// `httpHeader` or `httpPrefixHeaders`. /// Used when failing to serialize an `httpPayload`-bound struct into an HTTP response body. #[error("error building HTTP response: {0}")] - Build(#[from] aws_smithy_http::operation::error::BuildError), + Build(#[from] aws_smithy_types::error::operation::BuildError), /// Used when failing to serialize a struct into a `String` for the JSON-encoded HTTP response /// body. @@ -76,7 +76,7 @@ pub enum ResponseRejection { /// supplied timestamp is outside of the valid range when formatting using RFC-3339, i.e. a /// date outside the `0001-01-01T00:00:00.000Z`-`9999-12-31T23:59:59.999Z` range is supplied. #[error("error serializing JSON-encoded body: {0}")] - Serialization(#[from] aws_smithy_http::operation::error::SerializationError), + Serialization(#[from] aws_smithy_types::error::operation::SerializationError), /// Used when consuming an [`http::response::Builder`] into the constructed [`http::Response`] /// when calling [`http::response::Builder::body`]. diff --git a/rust-runtime/aws-smithy-http-server/src/protocol/rest_xml/rejection.rs b/rust-runtime/aws-smithy-http-server/src/protocol/rest_xml/rejection.rs index 3e1bed00c..6c44adaa2 100644 --- a/rust-runtime/aws-smithy-http-server/src/protocol/rest_xml/rejection.rs +++ b/rust-runtime/aws-smithy-http-server/src/protocol/rest_xml/rejection.rs @@ -16,9 +16,9 @@ pub enum ResponseRejection { #[error("invalid bound HTTP status code; status codes must be inside the 100-999 range: {0}")] InvalidHttpStatusCode(TryFromIntError), #[error("error building HTTP response: {0}")] - Build(#[from] aws_smithy_http::operation::error::BuildError), + Build(#[from] aws_smithy_types::error::operation::BuildError), #[error("error serializing XML-encoded body: {0}")] - Serialization(#[from] aws_smithy_http::operation::error::SerializationError), + Serialization(#[from] aws_smithy_types::error::operation::SerializationError), #[error("error building HTTP response: {0}")] HttpBuild(#[from] http::Error), } diff --git a/rust-runtime/aws-smithy-http/src/operation.rs b/rust-runtime/aws-smithy-http/src/operation.rs index 0fed557b7..7fad89f1e 100644 --- a/rust-runtime/aws-smithy-http/src/operation.rs +++ b/rust-runtime/aws-smithy-http/src/operation.rs @@ -9,11 +9,17 @@ use aws_smithy_types::config_bag::{Storable, StoreReplace}; use std::borrow::Cow; -//TODO(runtimeCratesVersioningCleanup): Re-point those who use the following reexport to -// directly depend on `aws_smithy_types` and remove the reexport below. +//TODO(runtimeCratesVersioningCleanup): Re-point those who use the deprecated type aliases to +// directly depend on `aws_smithy_types` and remove the type aliases below. /// Errors for operations pub mod error { - pub use aws_smithy_types::error::operation::{BuildError, SerializationError}; + /// An error occurred attempting to build an `Operation` from an input. + #[deprecated(note = "Moved to `aws_smithy_types::error::operation::BuildError`.")] + pub type BuildError = aws_smithy_types::error::operation::BuildError; + + /// An error that occurs when serialization of an operation fails. + #[deprecated(note = "Moved to `aws_smithy_types::error::operation::SerializationError`.")] + pub type SerializationError = aws_smithy_types::error::operation::SerializationError; } /// Metadata added to the [`ConfigBag`](aws_smithy_types::config_bag::ConfigBag) that identifies the API being called. -- GitLab