New this release:
- π (smithy-rs#1381, @alonlud) Add ability to sign a request with all headers, or to change which headers are excluded from signing
- π (smithy-rs#1390) Add method
ByteStream::into_async_read
. This makes it easy to convertByteStream
s into a struct implementingtokio:io::AsyncRead
. Available on crate featurert-tokio
only. - (smithy-rs#1404, @petrosagg) Add ability to specify a different rust crate name than the one derived from the package name
- (smithy-rs#1404, @petrosagg) Switch to RustCrypto's implementation of MD5.
Contributors Thank you for your contributions! β€
- @alonlud (smithy-rs#1381)
- @petrosagg (smithy-rs#1404)
Breaking Changes:
-
β π (aws-sdk-rust#494, aws-sdk-rust#519) The
aws_smithy_http::byte_stream::bytestream_util::FsBuilder
has been updated to allow for easier creation of multi-part requests.FsBuilder::offset
is a new method allowing users to specify an offset to start reading a file from.FsBuilder::file_size
has been reworked intoFsBuilder::length
and is now used to specify the amount of data to read.
With these two methods, it's now simple to create a
ByteStream
that will read a single "chunk" of a file. The example below demonstrates how you could divide a singleFile
into consecutive chunks to create multipleByteStream
s.let example_file_path = Path::new("/example.txt"); let example_file_size = tokio::fs::metadata(&example_file_path).await.unwrap().len(); let chunks = 6; let chunk_size = file_size / chunks; let mut byte_streams = Vec::new(); for i in 0..chunks { let length = if i == chunks - 1 { // If we're on the last chunk, the length to read might be less than a whole chunk. // We substract the size of all previous chunks from the total file size to get the // size of the final chunk. file_size - (i * chunk_size) } else { chunk_size }; let byte_stream = ByteStream::read_from() .path(&file_path) .offset(i * chunk_size) .length(length) .build() .await?; byte_streams.push(byte_stream); } for chunk in byte_streams { // Make requests to a service }
New this release:
- (smithy-rs#1352) Log a debug event when a retry is going to be peformed
- (smithy-rs#1332, @82marbag) Update generated crates to Rust 2021
Contributors Thank you for your contributions! β€
- @82marbag (smithy-rs#1332)
Breaking Changes:
- β (smithy-rs#1318) Bump MSRV from 1.56.1 to 1.58.1 per our "two versions behind" policy.
New this release:
- (smithy-rs#1307) Add new trait for HTTP body callbacks. This is the first step to enabling us to implement optional checksum verification of requests and responses.
- (smithy-rs#1330) Upgrade to Smithy 1.21.0
Breaking Changes:
- β (aws-sdk-rust#490) Update all runtime crates to edition 2021
New this release:
- (smithy-rs#1262, @liubin) Fix link to Developer Guide in crate's README.md
- (smithy-rs#1301, @benesch) Update urlencoding crate to v2.1.0
Contributors Thank you for your contributions! β€
- @benesch (smithy-rs#1301)
- @liubin (smithy-rs#1262)
Breaking Changes:
-
β (aws-sdk-rust#406)
aws_types::config::Config
has been renamed toaws_types:sdk_config::SdkConfig
. This is to better differentiate it from service-specific configs likeaws_s3_sdk::Config
. If you were creating shared configs withaws_config::load_from_env()
, then you don't have to do anything. If you were directly referring to a shared config, update youruse
statements andstruct
names.Before:
use aws_types::config::Config; fn main() { let config = Config::builder() // config builder methods... .build() .await; }
After:
use aws_types::SdkConfig; fn main() { let config = SdkConfig::builder() // config builder methods... .build() .await; }
-
β (smithy-rs#724) Timeout configuration has been refactored a bit. If you were setting timeouts through environment variables or an AWS profile, then you shouldn't need to change anything. Take note, however, that we don't currently support HTTP connect, read, write, or TLS negotiation timeouts. If you try to set any of those timeouts in your profile or environment, we'll log a warning explaining that those timeouts don't currently do anything.
If you were using timeouts programmatically, you'll need to update your code. In previous versions, timeout configuration was stored in a single
TimeoutConfig
struct. In this new version, timeouts have been broken up into several different config structs that are then collected in atimeout::Config
struct. As an example, to get the API per-attempt timeout in previous versions you would access it with<your TimeoutConfig>.api_call_attempt_timeout()
and in this new version you would access it with<your timeout::Config>.api.call_attempt_timeout()
. We also made some unimplemented timeouts inaccessible in order to avoid giving users the impression that setting them had an effect. We plan to re-introduce them once they're made functional in a future update.
New this release:
- (smithy-rs#1225)
DynMiddleware
is nowclone
able - (smithy-rs#1257) HTTP request property bag now contains list of desired HTTP versions to use when making requests. This list is not currently used but will be in an upcoming update.
Breaking Changes:
- β (smithy-rs#1197)
aws_smithy_types::retry::RetryKind
had itsNotRetryable
variant split intoUnretryableFailure
andUnnecessary
. If you implement theClassifyResponse
, then successful responses need to returnUnnecessary
, and failures that shouldn't be retried need to returnUnretryableFailure
. - β (smithy-rs#1209)
aws_smithy_types::primitive::Encoder
is now a struct rather than an enum, but its usage remains the same. - β (smithy-rs#1217)
ClientBuilder
helpersrustls()
andnative_tls()
now returnDynConnector
and use dynamic dispatch rather than returning their concrete connector type that would allow static dispatch. If static dispatch is desired, then manually construct a connector to give to the builder. For example, for rustls:builder.connector(Adapter::builder().build(aws_smithy_client::conns::https()))
(whereAdapter
is inaws_smithy_client::hyper_ext
).
New this release:
- π (smithy-rs#1197) Fixed a bug that caused clients to eventually stop retrying. The cross-request retry allowance wasn't being reimbursed upon receiving a successful response, so once this allowance reached zero, no further retries would ever be attempted.
Breaking Changes:
-
β (smithy-rs#1144) Some APIs required that timeout configuration be specified with an
aws_smithy_client::timeout::Settings
struct while others required anaws_smithy_types::timeout::TimeoutConfig
struct. Both were equivalent. Nowaws_smithy_types::timeout::TimeoutConfig
is used everywhere andaws_smithy_client::timeout::Settings
has been removed. Here's how to migrate code your code that depended ontimeout::Settings
:The old way:
let timeout = timeout::Settings::new() .with_connect_timeout(Duration::from_secs(1)) .with_read_timeout(Duration::from_secs(2));
The new way:
// This example is passing values, so they're wrapped in `Option::Some`. You can disable a timeout by passing `None`. let timeout = TimeoutConfig::new() .with_connect_timeout(Some(Duration::from_secs(1))) .with_read_timeout(Some(Duration::from_secs(2)));
-
β (smithy-rs#1085) Moved the following re-exports into a
types
module for all services:<service>::AggregatedBytes
-><service>::types::AggregatedBytes
<service>::Blob
-><service>::types::Blob
<service>::ByteStream
-><service>::types::ByteStream
<service>::DateTime
-><service>::types::DateTime
<service>::SdkError
-><service>::types::SdkError
-
β (smithy-rs#1085)
AggregatedBytes
andByteStream
are now only re-exported if the service has streaming operations, andBlob
/DateTime
are only re-exported if the service uses them. -
β (smithy-rs#1130) MSRV increased from
1.54
to1.56.1
per our 2-behind MSRV policy.
New this release:
- (smithy-rs#1144)
MakeConnectorFn
,HttpConnector
, andHttpSettings
have been moved fromaws_config::provider_config
toaws_smithy_client::http_connector
. This is in preparation for a later update that will change how connectors are created and configured. - (smithy-rs#1123) Refactor
Document
shape parser generation - (smithy-rs#1085) The
Client
andConfig
re-exports now have their documentation inlined in the service docs
New this release:
- (smithy-rs#1087) Improve docs on
Endpoint::{mutable, immutable}
- (smithy-rs#1118) SDK examples now come from
awsdocs/aws-doc-sdk-examples
rather than fromsmithy-rs
- (smithy-rs#1114, @mchoicpe-amazon) Provide SigningService creation via owned String
Contributors Thank you for your contributions! β€
- @mchoicpe-amazon (smithy-rs#1114)
Changes only impact generated AWS SDK
Changes only impact generated AWS SDK
New this release:
- (smithy-rs#1053) Upgraded Smithy to 1.16.1
- π (smithy-rs#1069) Fix broken link to
RetryMode
in client docs - π (smithy-rs#1069) Fix several doc links to raw identifiers (identifiers excaped with
r#
) - π (smithy-rs#1069) Reduce dependency recompilation in local dev
- π (aws-sdk-rust#405, smithy-rs#1083) Fixed paginator bug impacting EC2 describe VPCs (and others)
New this release:
- π (smithy-rs#1054, aws-sdk-rust#391) Fix critical paginator bug where an empty outputToken lead to a never ending stream.
Breaking Changes:
- β (smithy-rs#990) Codegen will no longer produce builders and clients with methods that take
impl Into<T>
except for strings and boxed types. - β (smithy-rs#1003) The signature of
aws_smithy_protocol_test::validate_headers
was made more flexible but may require adjusting invocations slightly.
New this release:
- π (aws-sdk-rust#47, smithy-rs#1006) Add support for paginators! Paginated APIs now include
.into_paginator()
and (when supported).into_paginator().items()
to enable paginating responses automatically. The paginator API should be considered in preview and is subject to change pending customer feedback. - π (aws-sdk-rust#357) Generated docs will convert
<a>
tags with nohref
attribute to<pre>
tags - (aws-sdk-rust#254, @jacco) Made fluent operation structs cloneable
Contributors Thank you for your contributions! β€
- @jacco (aws-sdk-rust#254)
New this release:
- π (smithy-rs#979) Make
aws-smithy-client
a required dependency in generated services.
Breaking Changes:
-
β (smithy-rs#930) Runtime crates no longer have default features. You must now specify the features that you want when you add a dependency to your
Cargo.toml
.Upgrade guide
before after aws-smithy-async = "VERSION"
aws-smithy-async = { version = "VERSION", features = ["rt-tokio"] }
aws-smithy-client = "VERSION"
aws-smithy-client = { version = "VERSION", features = ["client-hyper", "rustls", "rt-tokio"] }
aws-smithy-http = "VERSION"
aws-smithy-http = { version = "VERSION", features = ["rt-tokio"] }
-
β (smithy-rs#940)
aws_smithy_client::Client::https()
has been renamed todyn_https()
. This is to clearly distinguish it fromrustls
andnative_tls
which do not use a boxed connector.
New this release:
- π (smithy-rs#957) Include non-service-specific examples in the generated root Cargo workspace
- π (smithy-rs#922, smithy-rs#914) Add changelog automation to sdk-lints
- π (aws-sdk-rust#317, smithy-rs#907) Removed spamming log message when a client was used without a sleep implementation, and improved context and call to action in logged messages around missing sleep implementations.
- (smithy-rs#923) Use provided
sleep_impl
for retries instead of using Tokio directly. - (smithy-rs#920) Fix typos in module documentation for generated crates
- π (aws-sdk-rust#301, smithy-rs#892) Avoid serializing repetitive
xmlns
attributes in generated XML serializers. - π (smithy-rs#953, aws-sdk-rust#331) Fixed a bug where certain characters caused a panic during URI encoding.
- This release was a version bump to fix a version number conflict in crates.io
New this week
- Add docs.rs metadata section to all crates to document all features
New this week
- Improve docs on
aws-smithy-client
(smithy-rs#855) - Fix http-body dependency version (smithy-rs#883, aws-sdk-rust#305)
SdkError
now includes a variantTimeoutError
for when a request times out (smithy-rs#885)- Timeouts for requests are now configurable. You can set separate timeouts for each individual request attempt and all attempts made for a request. (smithy-rs#831)
Breaking Changes
- (aws-smithy-client): Extraneous
pub use SdkSuccess
removed fromaws_smithy_client::hyper_ext
. (smithy-rs#855)
Breaking Changes
Several breaking changes around aws_smithy_types::Instant
were introduced by smithy-rs#849:
aws_smithy_types::Instant
from was renamed toDateTime
to avoid confusion with the standard library's monotonically non-decreasingInstant
type.DateParseError
inaws_smithy_types
has been renamed toDateTimeParseError
to match the type that's being parsed.- The
chrono-conversions
feature and associated functions have been moved to theaws-smithy-types-convert
crate.- Calls to
Instant::from_chrono
should be changed to:use aws_smithy_types::DateTime; use aws_smithy_types_convert::date_time::DateTimeExt; // For chrono::DateTime<Utc> let date_time = DateTime::from_chrono_utc(chrono_date_time); // For chrono::DateTime<FixedOffset> let date_time = DateTime::from_chrono_offset(chrono_date_time);
- Calls to
instant.to_chrono()
should be changed to:use aws_smithy_types_convert::date_time::DateTimeExt; date_time.to_chrono_utc();
- Calls to
Instant::from_system_time
andInstant::to_system_time
have been changed toFrom
trait implementations.- Calls to
from_system_time
should be changed to:DateTime::from(system_time); // or let date_time: DateTime = system_time.into();
- Calls to
to_system_time
should be changed to:SystemTime::from(date_time); // or let system_time: SystemTime = date_time.into();
- Calls to
- Several functions in
Instant
/DateTime
were renamed:Instant::from_f64
->DateTime::from_secs_f64
Instant::from_fractional_seconds
->DateTime::from_fractional_secs
Instant::from_epoch_seconds
->DateTime::from_secs
Instant::from_epoch_millis
->DateTime::from_millis
Instant::epoch_fractional_seconds
->DateTime::as_secs_f64
Instant::has_nanos
->DateTime::has_subsec_nanos
Instant::epoch_seconds
->DateTime::secs
Instant::epoch_subsecond_nanos
->DateTime::subsec_nanos
Instant::to_epoch_millis
->DateTime::to_millis
- The
DateTime::fmt
method is now fallible and fails when aDateTime
's value is outside what can be represented by the desired date format. - In
aws-sigv4
, theSigningParams
builder'sdate_time
setter was renamed totime
and changed to take astd::time::SystemTime
instead of a chrono'sDateTime<Utc>
.
New this week
β οΈ MSRV increased from 1.53.0 to 1.54.0 per our 3-behind MSRV policy.- Conversions from
aws_smithy_types::DateTime
toOffsetDateTime
from thetime
crate are now available from theaws-smithy-types-convert
crate. (smithy-rs#849) - Fixed links to Usage Examples (smithy-rs#862, @floric)
No changes since last release except for version bumping since older versions
of the AWS SDK were failing to compile with the 0.27.0-alpha.2
version chosen
for the previous release.
Breaking Changes
- Members named
builder
on model structs were renamed tobuilder_value
so that their accessors don't conflict with the existingbuilder()
methods (smithy-rs#842)
New this week
- Fix epoch seconds date-time parsing bug in
aws-smithy-types
(smithy-rs#834) - Omit trailing zeros from fraction when formatting HTTP dates in
aws-smithy-types
(smithy-rs#834) - Generated structs now have accessor methods for their members (smithy-rs#842)
Breaking Changes
<operation>.make_operation(&config)
is now anasync
function for all operations. Code should be updated to call.await
. This will only impact users using the low-level API. (smithy-rs#797)
New this week
- SDK code generation now includes a version in addition to path parameters when the
version
parameter is included in smithy-build.json moduleDescription
insmithy-build.json
settings is now optional- Upgrade to Smithy 1.12
hyper::Error(IncompleteMessage)
will now be retried (smithy-rs#815)- Unions will optionally generate an
Unknown
variant to support parsing variants that don't exist on the client. These variants will fail to serialize if they are ever included in requests. - Fix generated docs on unions. (smithy-rs#826)
Breaking Changes
β οΈ All Smithy runtime crates have been renamed to have anaws-
prefix. This may require code changes:- Cargo.toml changes:
smithy-async
->aws-smithy-async
smithy-client
->aws-smithy-client
smithy-eventstream
->aws-smithy-eventstream
smithy-http
->aws-smithy-http
smithy-http-tower
->aws-smithy-http-tower
smithy-json
->aws-smithy-json
smithy-protocol-test
->aws-smithy-protocol-test
smithy-query
->aws-smithy-query
smithy-types
->aws-smithy-types
smithy-xml
->aws-smithy-xml
- Rust
use
statement changes:smithy_async
->aws_smithy_async
smithy_client
->aws_smithy_client
smithy_eventstream
->aws_smithy_eventstream
smithy_http
->aws_smithy_http
smithy_http_tower
->aws_smithy_http_tower
smithy_json
->aws_smithy_json
smithy_protocol_test
->aws_smithy_protocol_test
smithy_query
->aws_smithy_query
smithy_types
->aws_smithy_types
smithy_xml
->aws_smithy_xml
- Cargo.toml changes:
New this week
- Filled in missing docs for services in the rustdoc documentation (smithy-rs#779)
Breaking Changes
β οΈ Therust-codegen
plugin now requires amoduleDescription
in the smithy-build.json file. This property goes into the generated Cargo.toml file as the package description. (smithy-rs#766)
New this week
- Add
RustSettings
toCodegenContext
(smithy-rs#616, smithy-rs#752) - Prepare crate manifests for publishing to crates.io (smithy-rs#755)
- Generated Cargo.toml files can now be customized (smithy-rs#766)
New this week
- π Re-add missing deserialization operations that were missing because of a typo in
HttpBoundProtocolGenerator.kt
Breaking changes
β οΈ MSRV increased from 1.52.1 to 1.53.0 per our 3-behind MSRV policy.β οΈ smithy_client::retry::Config
fieldmax_retries
is renamed tomax_attempts
- This also brings a change to the semantics of the field. In the old version, setting
max_retries
to 3 would mean that up to 4 requests could occur (1 initial request and 3 retries). In the new version, settingmax_attempts
to 3 would mean that up to 3 requests could occur (1 initial request and 2 retries).
- This also brings a change to the semantics of the field. In the old version, setting
β οΈ smithy_client::retry::Config::with_max_retries
method is renamed towith_max_attempts
β οΈ Several classes in the codegen module were renamed and/or refactored (smithy-rs#735):ProtocolConfig
becameCodegenContext
and moved tosoftware.amazon.smithy.rust.codegen.smithy
HttpProtocolGenerator
becameProtocolGenerator
and was refactored to rely on composition instead of inheritanceHttpProtocolTestGenerator
becameProtocolTestGenerator
Protocol
moved intosoftware.amazon.smithy.rust.codegen.smithy.protocols
SmithyConnector
andDynConnector
now returnConnectorError
instead ofBox<dyn Error>
. If you have written a custom connector, it will need to be updated to return the new error type. (#744)- The
DispatchError
variant ofSdkError
now containsConnectorError
instead ofBox<dyn Error>
(#744).
New this week
- π Fix an issue where
smithy-xml
may have generated invalid XML (smithy-rs#719) - Add
RetryConfig
struct for configuring retry behavior (smithy-rs#725) - π Fix error when receiving empty event stream messages (smithy-rs#736)
- π Fix bug in event stream receiver that could cause the last events in the response stream to be lost (smithy-rs#736)
- Add connect & HTTP read timeouts to IMDS, defaulting to 1 second
- IO and timeout errors from Hyper can now be retried (#744)
Contributors
Thank you for your contributions! β€οΈ
- @obi1kenobi (smithy-rs#719)
- @guyilin-amazon (smithy-rs#750)
New This Week
- Add IMDS credential provider to
aws-config
(smithy-rs#709) - Add IMDS client to
aws-config
(smithy-rs#701) - Add
TimeSource
toaws_types::os_shim_internal
(smithy-rs#701) - User agent construction is now
const fn
(smithy-rs#701) - Add
sts::AssumeRoleProvider
toaws-config
(smithy-rs#703, aws-sdk-rust#3) - Add IMDS region provider to
aws-config
(smithy-rs#715) - Add query param signing to the
aws-sigv4
crate (smithy-rs#707) - π Update event stream
Receiver
s to beSend
(smithy-rs#702, #aws-sdk-rust#224)
New This Week
- π Fixes issue where
Content-Length
header could be duplicated leading to signing failure (aws-sdk-rust#220, smithy-rs#697) - π Fixes naming collision during generation of model shapes that collide with
<operationname>Input
and<operationname>Output
(#699)
This release adds support for three commonly requested features:
- More powerful credential chain
- Support for constructing multiple clients from the same configuration
- Support for Transcribe streaming and S3 Select
In addition, this overhauls client configuration which lead to a number of breaking changes. Detailed changes are inline.
Current Credential Provider Support:
- Environment variables
- Web Identity Token Credentials
- Profile file support (partial)
- Credentials
- SSO
- ECS Credential source
- IMDS credential source
- Assume role from source profile
- Static credentials source profile
- WebTokenIdentity provider
- Region
- Credentials
- IMDS
- ECS
from_env
loaded region & credentials from environment variables only. Default sources have been removed from the generated
SDK clients and moved to the aws-config
package. Note that the aws-config
package default chain adds support for
profile file and web identity token profiles.
- Add a dependency on
aws-config
:[dependencies] aws-config = { git = "https://github.com/awslabs/aws-sdk-rust", tag = "v0.0.17-alpha" }
- Update your client creation code:
// `shared_config` can be used to construct multiple different service clients! let shared_config = aws_config::load_from_env().await; // before: <service>::Client::from_env(); let client = <service>::Client::new(&shared_config)
Config::build()
has been modified to not fallback to a default provider. Instead, use aws-config
to load and modify
the default chain. Note that when you switch to aws-config
, support for profile files and web identity tokens will be added.
-
Add a dependency on
aws-config
:[dependencies] aws-config = { git = "https://github.com/awslabs/aws-sdk-rust", tag = "v0.0.17-alpha" }
-
Update your client creation code:
fn before() { let region = aws_types::region::ChainProvider::first_try(<1 provider>).or_default_provider(); let config = <service>::Config::builder().region(region).build(); let client = <service>::Client::from_conf(&config); } async fn after() { use aws_config::meta::region::RegionProviderChain; let region_provider = RegionProviderChain::first_try(<1 provider>).or_default_provider(); // `shared_config` can be used to construct multiple different service clients! let shared_config = aws_config::from_env().region(region_provider).load().await; let client = <service>::Client::new(&shared_config) }
All credential providers that were in aws-auth-providers
have been moved to aws-config
. Unless you have a specific use case
for a specific credential provider, you should use the default provider chain:
let shared_config = aws_config::load_from_env().await;
let client = <service>::Client::new(&shared_config);
AsyncProvideCredentials
has been renamed to ProvideCredentials
. The trait has been moved from aws-auth
to aws-types
.
The original ProvideCredentials
trait has been removed. The return type has been changed to by a custom future.
For synchronous use cases:
use aws_types::credentials::{ProvideCredentials, future};
#[derive(Debug)]
struct CustomCreds;
impl ProvideCredentials for CustomCreds {
fn provide_credentials<'a>(&'a self) -> future::ProvideCredentials<'a>
where
Self: 'a,
{
// if your credentials are synchronous, use `::ready`
// if your credentials are loaded asynchronously, use `::new`
future::ProvideCredentials::ready(todo!()) // your credentials go here
}
}
For asynchronous use cases:
use aws_types::credentials::{ProvideCredentials, future, Result};
#[derive(Debug)]
struct CustomAsyncCreds;
impl CustomAsyncCreds {
async fn load_credentials(&self) -> Result {
Ok(Credentials::from_keys("my creds...", "secret", None))
}
}
impl ProvideCredentials for CustomCreds {
fn provide_credentials<'a>(&'a self) -> future::ProvideCredentials<'a>
where
Self: 'a,
{
future::ProvideCredentials::new(self.load_credentials())
}
}
Breaking Changes
-
Credential providers from
aws-auth-providers
have been moved toaws-config
(#678) -
AsyncProvideCredentials
has been renamed toProvideCredentials
. The original non-async provide credentials has been removed. See the migration guide above. -
<sevicename>::from_env()
has been removed (#675). A drop-in replacement is available:- Add a dependency on
aws-config
:[dependencies] aws-config = { git = "https://github.com/awslabs/aws-sdk-rust", tag = "v0.0.17-alpha" }
- Update your client creation code:
let client = <service>>::Client::new(&aws_config::load_from_env().await)
- Add a dependency on
-
ProvideRegion
has been moved toaws_config::meta::region::ProvideRegion
. (#675) -
aws_types::region::ChainProvider
has been moved toaws_config::meta::region::RegionProviderChain
(#675). -
ProvideRegion
is now asynchronous. Code that calledprovider.region()
must be changed toprovider.region().await
. -
<awsservice>::Config::builder()
will not load a default region. To preserve previous behavior:- Add a dependency on
aws-config
:[dependencies] aws-config = { git = "https://github.com/awslabs/aws-sdk-rust", tag = "v0.0.17-alpha" }
-
let shared_config = aws_config::load_from_env().await; let config = <service>::config::Builder::from(&shared_config).<other builder modifications>.build();
- Add a dependency on
-
Request
andResponse
insmithy_http::operation
now useSharedPropertyBag
instead ofArc<Mutex<PropertyBag>>
. Use theacquire
andacquire_mut
methods to get a reference to the underlyingPropertyBag
to access properties. (#667)
New this week
- π Add profile file provider for region (#594, #682)
- π Add support for shared configuration between multiple services (#673)
- π Add support for Transcribe
StartStreamTranscription
and S3SelectObjectContent
operations (#667) - π Add support for new MemoryDB service (#677)
- Improve documentation on collection-aware builders (#664)
- Update AWS SDK models (#677)
- π Fix sigv4 signing when request ALPN negotiates to HTTP/2. (#674)
- π Fix integer size on S3
Size
(#679, aws-sdk-rust#209) - π Fix JSON parsing issue for modeled empty structs (#683, aws-sdk-rust#212)
- π Fix acronym case disagreement between FluentClientGenerator and HttpProtocolGenerator type aliasing (#668)
Internal Changes
- Add Event Stream support for restJson1 and restXml (#653, #667)
- Add NowOrLater future to smithy-async (#672)
New This Week
- π Add Chime Identity, Chime Messaging, and Snow Device Management support (#657)
- π Add profile file credential provider implementation. This implementation currently does not support credential sources for assume role providers other than environment variables. (#640)
- π Add support for WebIdentityToken providers via profile & environment variables. (#654)
- π Fix name collision that occurred when a model had both a union and a structure named
Result
(#643) - π Fix STS Assume Role with WebIdentity & Assume role with SAML to support clients with no credentials provided (#652)
- Update AWS SDK models (#657)
- Add initial implementation of a default provider chain. (#650)
Internal Changes
- Update sigv4 tests to work around behavior change in httparse 1.5. (#656)
- Remove Bintray/JCenter source from gradle build. (#651)
- Add experimental
dvr
module to smithy-client. This will enable easier testing of HTTP traffic. (#640) - Update smithy-client to simplify creating HTTP/HTTPS connectors (#650)
- Add Event Stream support to aws-sigv4 (#648)
- Add support for the smithy auth trait. This enables authorizations that explicitly disable authorization to work when no credentials have been provided. (#652)
Breaking changes
-
(#635) The
config()
,config_mut()
,request()
, andrequest_mut()
methods onoperation::Request
have been renamed toproperties()
,properties_mut()
,http()
, andhttp_mut()
respectively. -
(#635) The
Response
type on Tower middleware has been changed fromhttp::Response<SdkBody>
tooperation::Response
. The HTTP response is still available from theoperation::Response
using itshttp()
andhttp_mut()
methods. -
(#635) The
ParseHttpResponse
trait'sparse_unloaded()
method now takes anoperation::Response
rather than anhttp::Response<SdkBody>
. -
(#626)
ParseHttpResponse
no longer has a generic argument for the body type, but instead, always usesSdkBody
. This may cause compilation failures for you if you are using Smithy generated types to parse JSON or XML without using a client to request data from a service. The fix should be as simple as removing<SdkBody>
in the example below:Before:
let output = <Query as ParseHttpResponse<SdkBody>>::parse_loaded(&parser, &response).unwrap();
After:
let output = <Query as ParseHttpResponse>::parse_loaded(&parser, &response).unwrap();
New This Week
- Add AssumeRoleProvider parser implementation. (#632)
- The closure passed to
provide_credentials_fn
can now borrow values (#637) - Add
Sender
/Receiver
implementations for Event Stream (#639) - Bring in the latest AWS models (#630)
IoT Data Plane is now available! If you discover it isn't functioning as expected, please let us know!
This week also sees the addition of a robust async caching credentials provider. Take a look at the STS example to see how to use it.
New This Week
- π Add IoT Data Plane (#624)
- π Add LazyCachingCredentialsProvider to aws-auth for use with expiring credentials, such as STS AssumeRole. Update STS example to use this new provider (#578, #595)
- π Correctly encode HTTP Checksums using base64 instead of hex. Fixes aws-sdk-rust#164. (#615)
- Update SDK gradle build logic to use gradle properties (#620)
- Overhaul serialization/deserialization of numeric/boolean types. This resolves issues around serialization of NaN/Infinity and should also reduce the number of allocations required during serialization. (#618)
- Update SQS example to clarify usage of FIFO vs. standard queues (#622, @trevorrobertsjr)
- Implement Event Stream frame encoding/decoding (#609, #619)
Contributions
Thank you for your contributions! β€οΈ
- @trevorrobertsjr (#622)
- Remove timestreamwrite and timestreamquery from the generated services (#613)
Breaking changes
test-util
has been made an optional dependency and has moved from aws-hyper to smithy-http. If you were relying onaws_hyper::TestConnection
, addsmithy-client
as a dependency and enable the optionaltest-util
feature. This prunes some unnecessary dependencies onroxmltree
andserde_json
for most users. (#608)
New This Week
- π Release all but three remaining AWS services! Glacier, IoT Data Plane and Transcribe streaming will be available in a future release. If you discover that a service isn't functioning as expected please let us know! (#607)
- π Bugfix: Fix parsing bug where parsing XML incorrectly stripped whitespace (#590, aws-sdk-rust#153)
- Establish common abstraction for environment variables (#594)
- Add windows to the test matrix (#594)
- π Bugfix: Constrain RFC-3339 timestamp formatting to microsecond precision (#596)
New this Week
- π Add support for Autoscaling (#576, #582)
AsyncProvideCredentials
now introduces an additional lifetime parameter, simplifying bridging it with#[async_trait]
interfaces- Fix S3 bug when content type was set explicitly (aws-sdk-rust#131, #566, @eagletmt)
Contributions
Thank you for your contributions! β€οΈ
- @eagletmt (#566)
New this Week
β οΈ Breaking Change:ProvideCredentials
andCredentialError
were both moved intoaws_auth::provider
when they were previously inaws_auth
(#572)- π Add support for AWS Config (#570)
- π Add support for EBS (#567)
- π Add support for Cognito (#573)
- π Add support for Snowball (#579, @landonxjames)
- Make it possible to asynchronously provide credentials with
provide_credentials_fn
(#572, #577) - Improve RDS, QLDB, Polly, and KMS examples (#561, #560, #558, #556, #550)
- Update AWS SDK models (#575)
- π Bugfix: Fill in message from error response even when it doesn't match the modeled case format (#565)
Internal Changes
- Add support for
@unsignedPayload
Smithy trait (#567) - Strip service/api/client suffix from sdkId (#546)
- Remove idempotency token trait (#571)
Contributions
Thank you for your contributions! β€οΈ
- landonxjames (#579)
This week, we've added EKS, ECR and Cloudwatch. The JSON deserialization implementation has been replaced, please be on the lookout for potential issues.
New this Week
- π Add support for ECR (#557)
- π Add support for Cloudwatch (#554)
- π Add support for EKS (#553)
- :warn: Breaking Change: httpLabel no longer causes fields to be non-optional. (#537)
- :warn: Breaking Change:
Exception
is not renamed toError
. Code may need to be updated to replaceexception
witherror
- Add more SES examples, and improve examples for Batch.
- Improved error handling ergonomics: Errors now provide
is_<variantname>()
methods to simplify error handling - π Bugfix: fix bug where invalid query strings could be generated (#531, @eagletmt)
Internal Changes
- Pin CI version to 1.52.1 (#532)
- New JSON deserializer implementation (#530)
- Fix numerous namespace collision bugs (#539)
- Gracefully handle empty response bodies during JSON parsing (#553)
Contributors
Thank you for your contributions! β€οΈ
- @eagletmt (#531)
This week, we've added CloudWatch Logs support and fixed several bugs in the generated S3 clients. There are a few breaking changes this week.
New this Week
- π Add support for CloudWatch Logs (#526)
β οΈ Breaking Change: Theset_*
functions on generated Builders now always take anOption
(#506)β οΈ Breaking Change: Unions with Documents will see the inner document type change fromOption<Document>
toDocument
(#520)β οΈ Breaking Change: Theas_*
functions on unions now returnResult
rather thanOption
to clearly indicate what the actual value is (#527)- Add more S3 examples, and improve SNS, SQS, and SageMaker examples. Improve example doc comments (#490, #508, #509, #510, #511, #512, #513, #524)
- π Bugfix: Show response body in trace logs for calls that don't return a stream (#514)
- π Bugfix: Correctly parse S3's GetBucketLocation response (#516)
- π Bugfix: Correctly URL-encode tilde characters before SigV4 signing (#519)
- π Bugfix: Fix S3 PutBucketLifecycle operation by adding support for the
@httpChecksumRequired
Smithy trait ( #523) - π Bugfix: Correctly parse non-list headers with commas in them (#525, @eagletmt)
Internal Changes
- Reduce name collisions in generated code (#502)
- Combine individual example packages into per-service example packages with multiple binaries (#481, #490)
- Re-export HyperAdapter in smithy-client (#515, @zekisherif)
- Add serialization/deserialization benchmark for DynamoDB to exercise restJson1 generated code (#507)
Contributions
Thank you for your contributions! β€οΈ
- @eagletmt (#525)
- @zekisherif (#515)
Smithy-rs now has codegen support for all AWS services! This week, we've added CloudFormation, SageMaker, EC2, and SES. More details below.
New this Week
- π Add support for CloudFormation (#500, @alistaim)
- π Add support for SageMaker (#473, @alistaim)
- π Add support for EC2 (#495)
- π Add support for SES (#499)
- Add support for the EC2 Query protocol (#475)
- Generate fluent builders for all smithy-rs clients (#496, @jonhoo)
- π Bugfix: RFC-3339 timestamps (
date-time
format in Smithy) are now formatted correctly (#479, #489) - π Bugfix: Union and enum variants named Self no longer cause compile errors in generated code (#492)
Internal Changes
- Combine individual example packages into per-service example packages with multiple binaries (#477, #480, #482, #484, #485, #486, #487, #491)
- Work towards JSON deserialization overhaul (#474)
- Make deserializer function naming consistent between XML and JSON deserializers (#497)
Contributors:
- @Doug-AWS
- @jdisanti
- @rcoh
- @alistaim
- @jonhoo
Thanks!!
Starting this week, smithy-rs now has codegen support for all AWS services except EC2. This week weβve added MediaLive, MediaPackage, SNS, Batch, STS, RDS, RDSData, Route53, and IAM. More details below.
New this Week
- π Add support for MediaLive and MediaPackage (#449, @alastaim)
- π Add support for SNS (#450)
- π Add support for Batch (#452, @alistaim)
- π Add support for STS. Note: This does not include support for an STS-based credential provider although an example is provided. (#453)
- π Add support for RDS (#455) and RDS-Data (#470). (@LMJW)
- π Add support for Route53 (#457, @alistaim)
- Support AWS Endpoints & Regions. With this update, regions like
iam-fips
andcn-north-1
will now resolve to the correct endpoint. Please report any issues with endpoint resolution. (#468) - π Bugfix: Primitive numerics and booleans are now filtered from serialization when they are 0 and not marked as required. This resolves issues where maxResults needed to be set even though it is optional. (#451)
- π Bugfix: S3 Head Object returned the wrong error when the object did not exist (#460, fixes #456)
Internal Changes
- Remove unused key βbuildβ from smithy-build.json and Rust settings (#447)
- Split SDK CI jobs for faster builds & reporting (#446)
- Fix broken doc link in JSON serializer (@LMJW)
- Work towards JSON deserialization overhaul (#454, #462)
Contributors:
- @rcoh
- @jdisanti
- @alistaim
- @LMJW
Thanks!!
New this week:
- π Add support for SQS. SQS is our first service to use the awsQuery protocol. Please report any issues you may encounter.
- π Add support for ECS.
- Breaking Change: Refactored
smithy_types::Error
to be more flexible. Internal fields ofError
are now private and can now be accessed accessor functions. (#426) ByteStream::from_path
now acceptsimplications AsRef<Path>
(@LMJW)- Add support for S3 extended request id (#429)
- Add support for the awsQuery protocol. smithy-rs can now add support for all services except EC2.
- Bugfix: Timestamps that fell precisely on minute boundaries were not properly formatted (#435)
- Improve documentation for
ByteStream
& addpub use
(#443) - Add support for
EndpointPrefix
used bys3::WriteGetObjectResponse
( #420)
Smithy Internals
- Rewrite JSON serializer (#411, #423, #416, #427)
- Remove dead βrootProjectβ setting in
smithy-build.json
- Bugfix: Idempotency tokens were not properly generated when operations were used by resources
Contributors:
- @jdisanti
- @rcoh
- @LMJW
Thanks!