<!-- Do not manually edit this file. Use the `changelogger` tool. -->
August 4th, 2022
================
**Breaking Changes:**
- ⚠🎉 (all, [smithy-rs#1570](https://github.com/awslabs/smithy-rs/issues/1570), @weihanglo) Support @deprecated trait for aggregate shapes
- ⚠ (all, [smithy-rs#1157](https://github.com/awslabs/smithy-rs/issues/1157)) Rename EventStreamInput to EventStreamSender
- ⚠ (all, [smithy-rs#1157](https://github.com/awslabs/smithy-rs/issues/1157)) The type of streaming unions that contain errors is generated without those errors.
Errors in a streaming union `Union` are generated as members of the type `UnionError`.
Taking Transcribe as an example, the `AudioStream` streaming union generates, in the client, both the `AudioStream` type:
```rust
pubenumAudioStream{
AudioEvent(crate::model::AudioEvent),
Unknown,
}
```
and its error type,
```rust
pubstructAudioStreamError{
/// Kind of error that occurred.
pubkind:AudioStreamErrorKind,
/// Additional metadata about the error, including error code, message, and request ID.
pub(crate)meta:aws_smithy_types::Error,
}
```
`AudioStreamErrorKind` contains all error variants for the union.
Before, the generated code looked as:
```rust
pubenumAudioStream{
AudioEvent(crate::model::AudioEvent),
...allerrorvariants,
Unknown,
}
```
- ⚠ (all, [smithy-rs#1157](https://github.com/awslabs/smithy-rs/issues/1157)) `aws_smithy_http::event_stream::EventStreamSender` and `aws_smithy_http::event_stream::Receiver` are now generic over `<T, E>`,
where `T` is a streaming union and `E` the union's errors.
This means that event stream errors are now sent as `Err` of the union's error type.
With this example model:
```smithy
@streaming union Event {
throttlingError: ThrottlingError
}
@error("client") structure ThrottlingError {}
```
Before:
```rust
stream!{yieldOk(Event::ThrottlingError...)}
```
After:
```rust
stream!{yieldErr(EventError::ThrottlingError...)}
```
An example from the SDK is in [transcribe streaming](https://github.com/awslabs/smithy-rs/blob/4f51dd450ea3234a7faf481c6025597f22f03805/aws/sdk/integration-tests/transcribestreaming/tests/test.rs#L80).
**New this release:**
- 🎉 (all, [smithy-rs#1482](https://github.com/awslabs/smithy-rs/issues/1482)) Update codegen to generate support for flexible checksums.
- (all, [smithy-rs#1520](https://github.com/awslabs/smithy-rs/issues/1520)) Add explicit cast during JSON deserialization in case of custom Symbol providers.
- (all, [smithy-rs#1578](https://github.com/awslabs/smithy-rs/issues/1578), @lkts) Change detailed logs in CredentialsProviderChain from info to debug
- (all, [smithy-rs#1573](https://github.com/awslabs/smithy-rs/issues/1573), [smithy-rs#1569](https://github.com/awslabs/smithy-rs/issues/1569)) Non-streaming struct members are now marked `#[doc(hidden)]` since they will be removed in the future
An example from the SDK is in [transcribe streaming](https://github.com/awslabs/smithy-rs/blob/4f51dd450ea3234a7faf481c6025597f22f03805/aws/sdk/integration-tests/transcribestreaming/tests/test.rs#L80).
"""
references=["smithy-rs#1157"]
meta={"breaking"=true,"tada"=false,"bug"=false}
author="82marbag"
[[smithy-rs]]
message="""
The type of streaming unions that contain errors is generated without those errors.
Errors in a streaming union `Union` are generated as members of the type `UnionError`.
Taking Transcribe as an example, the `AudioStream` streaming union generates, in the client, both the `AudioStream` type:
```rust
pub enum AudioStream {
AudioEvent(crate::model::AudioEvent),
Unknown,
}
```
and its error type,
```rust
pub struct AudioStreamError {
/// Kind of error that occurred.
pub kind: AudioStreamErrorKind,
/// Additional metadata about the error, including error code, message, and request ID.
pub(crate) meta: aws_smithy_types::Error,
}
```
`AudioStreamErrorKind` contains all error variants for the union.
Before, the generated code looked as:
```rust
pub enum AudioStream {
AudioEvent(crate::model::AudioEvent),
... all error variants,
Unknown,
}
```
"""
references=["smithy-rs#1157"]
meta={"breaking"=true,"tada"=false,"bug"=false}
author="82marbag"
[[smithy-rs]]
message="""
`aws_smithy_http::event_stream::EventStreamSender` and `aws_smithy_http::event_stream::Receiver` are now generic over `<T, E>`,
where `T` is a streaming union and `E` the union's errors.
This means that event stream errors are now sent as `Err` of the union's error type.
An example from the SDK is in [transcribe streaming](https://github.com/awslabs/smithy-rs/blob/4f51dd450ea3234a7faf481c6025597f22f03805/aws/sdk/integration-tests/transcribestreaming/tests/test.rs#L80).
"""
references=["smithy-rs#1157"]
meta={"breaking"=true,"tada"=false,"bug"=false}
author="82marbag"
[[aws-sdk-rust]]
message="""
The AWS SDK for Rust now supports [additional checksum algorithms for Amazon S3](https://aws.amazon.com/blogs/aws/new-additional-checksum-algorithms-for-amazon-s3/).
When getting and putting objects, you may now request that the request body be validated with a checksum. The supported
algorithms are SHA-1, SHA-256, CRC-32, and CRC-32C.
"message":"Fix compilation of `aws-config` with `rustls` and `native-tls` disabled. The\n`ProviderConfig::with_tcp_connector` method uses\n`aws_smithy_client::hyper_ext`, which only exists with the `client-hyper`\nfeature enabled. Add a feature enabling that, and enable it by default.\n",
"message":"Add support for aws-chunked content encoding. Only single-chunk encoding is supported. Multiple chunks and\nchunk signing are not supported at this time.\n",
"message":"Rename EventStreamInput to EventStreamSender",
"message":"Re-export aws_types::SdkConfig in aws_config",
"message":"The type of streaming unions that contain errors is generated without those errors.\nErrors in a streaming union `Union` are generated as members of the type `UnionError`.\nTaking Transcribe as an example, the `AudioStream` streaming union generates, in the client, both the `AudioStream` type:\n```rust\npub enum AudioStream {\n AudioEvent(crate::model::AudioEvent),\n Unknown,\n}\n```\nand its error type,\n```rust\npub struct AudioStreamError {\n /// Kind of error that occurred.\n pub kind: AudioStreamErrorKind,\n /// Additional metadata about the error, including error code, message, and request ID.\n pub(crate) meta: aws_smithy_types::Error,\n}\n```\n`AudioStreamErrorKind` contains all error variants for the union.\nBefore, the generated code looked as:\n```rust\npub enum AudioStream {\n AudioEvent(crate::model::AudioEvent),\n ... all error variants,\n Unknown,\n}\n```\n",
"message":"Add `From<aws_smithy_client::erase::DynConnector>` impl for `aws_smithy_client::http_connector::HttpConnector`",
"message":"`aws_smithy_http::event_stream::EventStreamSender` and `aws_smithy_http::event_stream::Receiver` are now generic over `<T, E>`,\nwhere `T` is a streaming union and `E` the union's errors.\nThis means that event stream errors are now sent as `Err` of the union's error type.\nWith this example model:\n```smithy\n@streaming union Event {\n throttlingError: ThrottlingError\n}\n@error(\"client\") structure ThrottlingError {}\n```\nBefore:\n```rust\nstream! { yield Ok(Event::ThrottlingError ...) }\n```\nAfter:\n```rust\nstream! { yield Err(EventError::ThrottlingError ...) }\n```\nAn example from the SDK is in [transcribe streaming](https://github.com/awslabs/smithy-rs/blob/4f51dd450ea3234a7faf481c6025597f22f03805/aws/sdk/integration-tests/transcribestreaming/tests/test.rs#L80).\n",
"message":"Updated SDK Client retry behavior to allow for a configurable initial backoff. Previously, the initial backoff\n(named `r` in the code) was set to 2 seconds. This is not an ideal default for services like DynamoDB that expect\nclients to quickly retry failed request attempts. Now, users can set quicker (or slower) backoffs according to their\nneeds.\n\n```rust\n#[tokio::main]\nasync fn main() -> Result<(), aws_sdk_dynamodb::Error> {\n let retry_config = aws_smithy_types::retry::RetryConfigBuilder::new()\n .max_attempts(4)\n .initial_backoff(Duration::from_millis(20));\n\n let shared_config = aws_config::from_env()\n .retry_config(retry_config)\n .load()\n .await;\n\n let client = aws_sdk_dynamodb::Client::new(&shared_config);\n\n // Given the 20ms backoff multiplier, and assuming this request fails 3 times before succeeding,\n // the first retry would take place between 0-20ms after the initial request,\n // the second retry would take place between 0-40ms after the first retry,\n // and the third retry would take place between 0-80ms after the second retry.\n let request = client\n .put_item()\n .table_name(\"users\")\n .item(\"username\", \"Velfi\")\n .item(\"account_type\", \"Developer\")\n .send().await?;\n\n Ok(())\n}\n```\n",
"message":"The AWS SDK for Rust now supports [additional checksum algorithms for Amazon S3](https://aws.amazon.com/blogs/aws/new-additional-checksum-algorithms-for-amazon-s3/).\nWhen getting and putting objects, you may now request that the request body be validated with a checksum. The supported\nalgorithms are SHA-1, SHA-256, CRC-32, and CRC-32C.\n\n```rust\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n let sdk_config = aws_config::load_from_env().await;\n let s3_client = aws_sdk_s3::Client::new(&sdk_config);\n let body = aws_sdk_s3::types::ByteStream::read_from()\n .path(std::path::Path::new(\"./path/to/your/file.txt\"))\n .build()\n .await\n .unwrap();\n\n let _ = s3_client\n .put_object()\n .bucket(\"your-bucket\")\n .key(\"file.txt\")\n .body(body)\n // When using this field, the checksum will be calculated for you\n .checksum_algorithm(aws_sdk_s3::model::ChecksumAlgorithm::Crc32C)\n .send()\n .await?;\n\n let body = aws_sdk_s3::types::ByteStream::read_from()\n .path(std::path::Path::new(\"./path/to/your/other-file.txt\"))\n .build()\n .await\n .unwrap();\n\n let _ = s3_client\n .put_object()\n .bucket(\"your-bucket\")\n .key(\"other-file.txt\")\n .body(body)\n // Alternatively, you can pass a checksum that you've calculated yourself. It must be base64\n // encoded. Also, make sure that you're base64 encoding the bytes of the checksum, not its\n // string representation.\n .checksum_crc32_c(aws_smithy_types::base64::encode(&A_PRECALCULATED_CRC_32_C_CHECKSUM[..]))\n .send()\n .await?;\n}\n```\n",
"message":"Until now, SDK crates have all shared the exact same version numbers.\nThis changes with this release. From now on, SDK crates will only version\nbump if they have changes. Coincidentally, they may share the same version\nnumber for some releases since changes to the code generator will cause\na version bump in all of them, but this should not be relied upon.\n",
"message":"Only emit a warning about failing to expand a `~` to the home\ndirectory in a profile file's path if that path was explicitly\nset (don't emit it for the default paths)\n",