From b151724c126888037028fa6dc969f27ab0c6156b Mon Sep 17 00:00:00 2001 From: e-thoman <119435263+e-thoman@users.noreply.github.com> Date: Tue, 2 Jun 2026 14:16:40 -0400 Subject: [PATCH 1/9] =?UTF-8?q?feat(cbor):=20Add=20BigInteger=20support=20?= =?UTF-8?q?with=20RFC=208949=20=C2=A73.4.3=20compliance=20(#4611)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add CBOR encoding and decoding support for BigInteger using CBOR tags 2 (positive bignum) and 3 (negative bignum) as specified by RFC 8949 §3.4.3 and the Smithy RPC v2 CBOR protocol. - Preferred serialization: values fitting in u64/i64 use major types 0/1 instead of bignum tags - Tag 3 correctly encodes -1-n per RFC 8949 - Handle minicbor Int type for major type 1 values exceeding i64 range - Add num-bigint dependency to aws-smithy-cbor - Codegen: BigIntegerShape delegates to decoder.big_integer() / encoder.big_integer() - BigDecimal remains unsupported with CBOR (fails at codegen time) - Comprehensive tests: round-trip, RFC 8949 Appendix A interop, edge cases Resolves: smithy-rs#4473 ## Motivation and Context BigInteger was previously unsupported with the CBOR protocol — attempting to use a `BigIntegerShape` in a Smithy model with RPC v2 CBOR would fail at codegen time with a `CodegenException`. This blocked any service or client that needed arbitrary-precision integers over CBOR. The Smithy RPC v2 CBOR spec requires BigInteger support via CBOR tags 2 and 3 (RFC 8949 §3.4.3), and this change implements that requirement. See smithy-rs#4473. ## Description **Rust runtime (`aws-smithy-cbor`):** - Added `big_integer()` to `Encoder` — writes values using preferred serialization (major type 0/1 for values fitting u64/i64, tags 2/3 for larger values). Tag 3 encodes the byte string as `n` where the value is `-1 - n` per RFC 8949. - Added `big_integer()` to `Decoder` — reads CBOR tags 2/3 (bignum), plain unsigned/signed integers (major types 0/1), and minicbor `Int` type for major type 1 values exceeding i64 range. - Added `num-bigint` 0.4 dependency for arbitrary-precision integer arithmetic. - Added `strip_leading_zeroes()` helper for preferred bignum serialization. **Codegen (`codegen-core`):** - `CborParserGenerator.kt`: `BigIntegerShape` now emits `decoder.big_integer()` instead of throwing `CodegenException`. - `CborSerializerGenerator.kt`: `BigIntegerShape` now emits `encoder.big_integer()` instead of throwing `CodegenException`. - `BigDecimalShape` remains unsupported (still throws `CodegenException`). ## Testing - 18 new Rust unit tests in `aws-smithy-cbor` covering: - Round-trip encode/decode for positive, negative, and large values - RFC 8949 Appendix A interoperability vectors (2^64, -2^64-1) - Preferred serialization verification (small values use major types 0/1, not tags) - Edge cases: empty byte strings for tags 2/3, invalid tag rejection, major type 1 values exceeding i64 - Leading zero stripping in bignum byte strings - Updated Kotlin codegen tests to verify successful code generation instead of expecting `CodegenException` - All 29 `aws-smithy-cbor` tests pass ## Checklist - [x] For changes to the smithy-rs codegen or runtime crates, I have created a changelog entry Markdown file in the `.changelog` directory, specifying "client," "server," or both in the `applies_to` key. ---- _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: Landon James --- .changelog/cbor-big-integer.md | 9 + .../protocols/parse/CborParserGenerator.kt | 9 +- .../serialize/CborSerializerGenerator.kt | 8 +- .../parse/CborParserGeneratorTest.kt | 33 ++- .../serialize/CborSerializerGeneratorTest.kt | 33 ++- gradle.properties | 2 +- rust-runtime/Cargo.lock | 9 +- rust-runtime/aws-smithy-cbor/Cargo.toml | 3 +- rust-runtime/aws-smithy-cbor/src/decode.rs | 202 +++++++++++++++++- rust-runtime/aws-smithy-cbor/src/encode.rs | 170 ++++++++++++++- 10 files changed, 416 insertions(+), 62 deletions(-) create mode 100644 .changelog/cbor-big-integer.md diff --git a/.changelog/cbor-big-integer.md b/.changelog/cbor-big-integer.md new file mode 100644 index 00000000000..c7a2a2b50bc --- /dev/null +++ b/.changelog/cbor-big-integer.md @@ -0,0 +1,9 @@ +--- +applies_to: ["client", "server"] +authors: ["ethoman"] +references: ["smithy-rs#4473"] +breaking: false +new_feature: true +bug_fix: false +--- +Add CBOR encoding and decoding support for `BigInteger` using CBOR tags 2 (positive bignum) and 3 (negative bignum) as specified by RFC 8949 §3.4.3 and the Smithy RPC v2 CBOR protocol. Values that fit in CBOR major types 0 or 1 use preferred serialization (plain integers) instead of bignum tags. diff --git a/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/CborParserGenerator.kt b/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/CborParserGenerator.kt index 53a75a47f6e..95079ab5437 100644 --- a/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/CborParserGenerator.kt +++ b/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/CborParserGenerator.kt @@ -599,14 +599,7 @@ class CborParserGenerator( is TimestampShape -> rust("decoder.timestamp()") - // BigInteger/BigDecimal are not supported with CBOR. - // The Smithy RPC v2 CBOR spec requires these to be encoded using CBOR tags 2/3/4 - // (binary bignum representation), but aws-smithy-cbor doesn't implement these tags yet. - is BigIntegerShape -> - throw CodegenException( - "BigInteger is not supported with Concise Binary Object Representation (CBOR) protocol. " + - "See https://github.com/smithy-lang/smithy-rs/issues/4473", - ) + is BigIntegerShape -> rust("decoder.big_integer()") is BigDecimalShape -> throw CodegenException( "BigDecimal is not supported with Concise Binary Object Representation (CBOR) protocol. " + diff --git a/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/CborSerializerGenerator.kt b/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/CborSerializerGenerator.kt index fcfd28e0606..ee509af4afa 100644 --- a/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/CborSerializerGenerator.kt +++ b/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/CborSerializerGenerator.kt @@ -496,13 +496,7 @@ class CborSerializerGenerator( is TimestampShape -> rust("$encoder.timestamp(${value.asRef()});") - // BigInteger/BigDecimal are not supported with CBOR. - // The Smithy RPC v2 CBOR spec requires these to be encoded using CBOR tags 2/3/4 - // (binary bignum representation), but aws-smithy-cbor doesn't implement these tags yet. - is BigIntegerShape -> - throw CodegenException( - "BigInteger is not supported with Concise Binary Object Representation (CBOR) protocol", - ) + is BigIntegerShape -> rust("$encoder.big_integer(${value.asRef()});") is BigDecimalShape -> throw CodegenException( "BigDecimal is not supported with Concise Binary Object Representation (CBOR) protocol", diff --git a/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/CborParserGeneratorTest.kt b/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/CborParserGeneratorTest.kt index 5931b4712d2..0e5776494cb 100644 --- a/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/CborParserGeneratorTest.kt +++ b/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/CborParserGeneratorTest.kt @@ -66,7 +66,7 @@ class CborParserGeneratorTest { """.asSmithyModel() @Test - fun `throws CodegenException when deserializing BigInteger with CBOR`() { + fun `generates parser for BigInteger with CBOR`() { val model = OperationNormalizer.transform(modelWithBigInteger) val codegenContext = testCodegenContext(model) val symbolProvider = codegenContext.symbolProvider @@ -80,25 +80,20 @@ class CborParserGeneratorTest { val project = TestWorkspace.testProject(symbolProvider) - val exception = - assertThrows { - project.lib { - unitTest( - "cbor_parser", - """ - let bytes = &[]; - let _output = ${format(operationParser!!)}; - """, - ) - } - - model.lookup("test#TestOp").outputShape(model).also { output -> - output.renderWithModelBuilder(model, symbolProvider, project) - } - project.compileAndTest() - } + project.lib { + unitTest( + "cbor_big_integer_parser", + """ + let bytes: &[u8] = &[]; + let _output = ${format(operationParser!!)}; + """, + ) + } - assert(exception.message!!.contains("BigInteger is not supported with Concise Binary Object Representation (CBOR)")) + model.lookup("test#TestOp").outputShape(model).also { output -> + output.renderWithModelBuilder(model, symbolProvider, project) + } + project.compileAndTest() } @Test diff --git a/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/CborSerializerGeneratorTest.kt b/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/CborSerializerGeneratorTest.kt index 5f4afca59a3..940658e8add 100644 --- a/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/CborSerializerGeneratorTest.kt +++ b/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/CborSerializerGeneratorTest.kt @@ -65,7 +65,7 @@ class CborSerializerGeneratorTest { """.asSmithyModel() @Test - fun `throws CodegenException when serializing BigInteger with CBOR`() { + fun `generates serializer for BigInteger with CBOR`() { val model = OperationNormalizer.transform(modelWithBigInteger) val codegenContext = testCodegenContext(model) val symbolProvider = codegenContext.symbolProvider @@ -78,25 +78,20 @@ class CborSerializerGeneratorTest { val project = TestWorkspace.testProject(symbolProvider) - val exception = - assertThrows { - project.lib { - unitTest( - "cbor_serializer", - """ - let input = crate::test_input::TestOpInput::builder().build(); - let _serialized = ${format(operationGenerator!!)}(&input); - """, - ) - } - - model.lookup("test#TestOp").inputShape(model).also { input -> - input.renderWithModelBuilder(model, symbolProvider, project) - } - project.compileAndTest() - } + project.lib { + unitTest( + "cbor_big_integer_serializer", + """ + let input = crate::test_input::TestOpInput::builder().build().unwrap(); + let _serialized = ${format(operationGenerator!!)}(&input); + """, + ) + } - assert(exception.message!!.contains("BigInteger is not supported with Concise Binary Object Representation (CBOR)")) + model.lookup("test#TestOp").inputShape(model).also { input -> + input.renderWithModelBuilder(model, symbolProvider, project) + } + project.compileAndTest() } @Test diff --git a/gradle.properties b/gradle.properties index 6ab5830f75f..0f3c3f6109f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,4 +17,4 @@ allowLocalDeps=false # Avoid registering dependencies/plugins/tasks that are only used for testing purposes isTestingEnabled=true # codegen publication version -codegenVersion=0.1.18 +codegenVersion=0.1.19 diff --git a/rust-runtime/Cargo.lock b/rust-runtime/Cargo.lock index 686e9a31ae0..3e9c8c6c7d8 100644 --- a/rust-runtime/Cargo.lock +++ b/rust-runtime/Cargo.lock @@ -370,13 +370,14 @@ dependencies = [ [[package]] name = "aws-smithy-cbor" -version = "0.61.9" +version = "0.61.10" dependencies = [ "aws-smithy-runtime-api 1.12.3", "aws-smithy-schema", "aws-smithy-types 1.4.9", "criterion", "minicbor 2.2.2", + "num-bigint", ] [[package]] @@ -570,7 +571,7 @@ dependencies = [ name = "aws-smithy-http-server" version = "0.66.5" dependencies = [ - "aws-smithy-cbor 0.61.9", + "aws-smithy-cbor 0.61.10", "aws-smithy-http 0.63.6", "aws-smithy-json 0.62.7", "aws-smithy-runtime-api 1.12.3", @@ -722,7 +723,7 @@ dependencies = [ name = "aws-smithy-legacy-http-server" version = "0.65.15" dependencies = [ - "aws-smithy-cbor 0.61.9", + "aws-smithy-cbor 0.61.10", "aws-smithy-json 0.62.7", "aws-smithy-legacy-http", "aws-smithy-runtime-api 1.12.3", @@ -2496,7 +2497,7 @@ dependencies = [ name = "inlineable" version = "0.1.0" dependencies = [ - "aws-smithy-cbor 0.61.9", + "aws-smithy-cbor 0.61.10", "aws-smithy-compression", "aws-smithy-http 0.63.6", "aws-smithy-json 0.62.7", diff --git a/rust-runtime/aws-smithy-cbor/Cargo.toml b/rust-runtime/aws-smithy-cbor/Cargo.toml index 5b2708a4371..2cc957f7761 100644 --- a/rust-runtime/aws-smithy-cbor/Cargo.toml +++ b/rust-runtime/aws-smithy-cbor/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-cbor" -version = "0.61.9" +version = "0.61.10" authors = [ "AWS Rust SDK Team ", "David Pérez ", @@ -24,6 +24,7 @@ features = [ aws-smithy-runtime-api = { path = "../aws-smithy-runtime-api", features = ["client"] } aws-smithy-schema = { path = "../aws-smithy-schema" } aws-smithy-types = { path = "../aws-smithy-types" } +num-bigint = "0.4.6" [dev-dependencies] criterion = "0.5.1" diff --git a/rust-runtime/aws-smithy-cbor/src/decode.rs b/rust-runtime/aws-smithy-cbor/src/decode.rs index 1767c89cbdd..f05cdb84ef7 100644 --- a/rust-runtime/aws-smithy-cbor/src/decode.rs +++ b/rust-runtime/aws-smithy-cbor/src/decode.rs @@ -5,7 +5,7 @@ use std::borrow::Cow; -use aws_smithy_types::{Blob, DateTime}; +use aws_smithy_types::{BigInteger, Blob, DateTime}; use minicbor::decode::Error; use crate::data::Type; @@ -253,6 +253,71 @@ impl<'b> Decoder<'b> { Ok(result) } } + + /// Returns a `BigInteger` from either a CBOR tag 2/3 (bignum) or a plain integer. + /// + /// Per RFC 8949 §3.4.3, tag 2 encodes unsigned bignum `n` and tag 3 encodes + /// negative bignum `-1 - n`, where `n` is the unsigned integer from the byte + /// string in network byte order. Plain CBOR integers (major types 0 and 1) + /// are also accepted per preferred serialization rules. + pub fn big_integer(&mut self) -> Result { + use num_bigint::BigInt; + + match self.decoder.datatype().map_err(DeserializeError::new)? { + minicbor::data::Type::Tag => { + let tag = self.decoder.tag().map_err(DeserializeError::new)?; + let bytes = self.decoder.bytes().map_err(DeserializeError::new)?; + let n = BigInt::from_bytes_be(num_bigint::Sign::Plus, bytes); + + let value = match tag.as_u64() { + 2 => n, + 3 => -n - 1, // tag 3 value = -1 - n + _ => { + return Err(DeserializeError::new(Error::message( + "expected CBOR tag 2 (positive bignum) or tag 3 (negative bignum)", + ))); + } + }; + value + .to_string() + .parse() + .map_err(|_| DeserializeError::new(Error::message("invalid bignum value"))) + } + minicbor::data::Type::U8 + | minicbor::data::Type::U16 + | minicbor::data::Type::U32 + | minicbor::data::Type::U64 => { + let value = self.decoder.u64().map_err(DeserializeError::new)?; + value + .to_string() + .parse() + .map_err(|_| DeserializeError::new(Error::message("invalid integer value"))) + } + minicbor::data::Type::I8 + | minicbor::data::Type::I16 + | minicbor::data::Type::I32 + | minicbor::data::Type::I64 => { + let value = self.decoder.i64().map_err(DeserializeError::new)?; + value + .to_string() + .parse() + .map_err(|_| DeserializeError::new(Error::message("invalid integer value"))) + } + // Int covers CBOR major type 1 values that exceed i64 range + // (argument > i64::MAX, i.e. values from -2^64 to -(i64::MAX+2)). + minicbor::data::Type::Int => { + let int_val = self.decoder.int().map_err(DeserializeError::new)?; + let value: i128 = int_val.into(); + BigInt::from(value) + .to_string() + .parse() + .map_err(|_| DeserializeError::new(Error::message("invalid integer value"))) + } + _ => Err(DeserializeError::new(Error::message( + "expected CBOR integer or bignum tag", + ))), + } + } } #[allow(dead_code)] // to avoid `never constructed` warning @@ -387,6 +452,141 @@ mod tests { ); } + #[test] + fn big_integer_round_trip_positive() { + for value in ["0", "1", "23", "256", "65535", "18446744073709551615"] { + let mut encoder = crate::Encoder::new(Vec::new()); + encoder.big_integer(&value.parse().unwrap()); + let bytes = encoder.into_writer(); + let mut decoder = Decoder::new(&bytes); + let result = decoder.big_integer().expect("should decode"); + assert_eq!(result.as_ref(), value, "round-trip failed for {value}"); + } + } + + #[test] + fn big_integer_round_trip_negative() { + for value in ["-1", "-42", "-256", "-18446744073709551616"] { + let mut encoder = crate::Encoder::new(Vec::new()); + encoder.big_integer(&value.parse().unwrap()); + let bytes = encoder.into_writer(); + let mut decoder = Decoder::new(&bytes); + let result = decoder.big_integer().expect("should decode"); + assert_eq!(result.as_ref(), value, "round-trip failed for {value}"); + } + } + + #[test] + fn big_integer_round_trip_large() { + let large_pos = "123456789012345678901234567890"; + let large_neg = "-123456789012345678901234567890"; + for value in [large_pos, large_neg] { + let mut encoder = crate::Encoder::new(Vec::new()); + encoder.big_integer(&value.parse().unwrap()); + let bytes = encoder.into_writer(); + let mut decoder = Decoder::new(&bytes); + let result = decoder.big_integer().expect("should decode"); + assert_eq!(result.as_ref(), value, "round-trip failed for {value}"); + } + } + + #[test] + fn big_integer_rfc8949_appendix_a_positive() { + // RFC 8949 Appendix A: 18446744073709551616 (2^64) = 0xc249010000000000000000 + let bytes = [ + 0xc2, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ]; + let mut decoder = Decoder::new(&bytes); + let result = decoder.big_integer().expect("should decode"); + assert_eq!(result.as_ref(), "18446744073709551616"); + } + + #[test] + fn big_integer_rfc8949_appendix_a_negative() { + // RFC 8949 Appendix A: -18446744073709551617 = 0xc349010000000000000000 + let bytes = [ + 0xc3, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ]; + let mut decoder = Decoder::new(&bytes); + let result = decoder.big_integer().expect("should decode"); + assert_eq!(result.as_ref(), "-18446744073709551617"); + } + + #[test] + fn big_integer_from_plain_cbor_unsigned() { + let mut enc = minicbor::Encoder::new(Vec::new()); + enc.u64(9999).unwrap(); + let bytes = enc.into_writer(); + let mut decoder = Decoder::new(&bytes); + let result = decoder.big_integer().expect("should decode plain integer"); + assert_eq!(result.as_ref(), "9999"); + } + + #[test] + fn big_integer_from_plain_cbor_negative() { + let mut enc = minicbor::Encoder::new(Vec::new()); + enc.i64(-500).unwrap(); + let bytes = enc.into_writer(); + let mut decoder = Decoder::new(&bytes); + let result = decoder + .big_integer() + .expect("should decode negative plain integer"); + assert_eq!(result.as_ref(), "-500"); + } + + #[test] + fn big_integer_from_plain_cbor_positive_signed() { + // A positive value such as +123 is encoded as CBOR major type 0 (unsigned) + // per preferred serialization and must decode back to the same value. + let mut enc = minicbor::Encoder::new(Vec::new()); + enc.i64(123).unwrap(); + let bytes = enc.into_writer(); + let mut decoder = Decoder::new(&bytes); + let result = decoder + .big_integer() + .expect("should decode positive plain integer"); + assert_eq!(result.as_ref(), "123"); + } + + #[test] + fn big_integer_tag3_empty_byte_string() { + // Tag 3 with empty byte string = -1 - 0 = -1 + let bytes = [0xc3, 0x40]; // tag 3, empty byte string + let mut decoder = Decoder::new(&bytes); + let result = decoder.big_integer().expect("should decode"); + assert_eq!(result.as_ref(), "-1"); + } + + #[test] + fn big_integer_tag2_empty_byte_string() { + // Tag 2 with empty byte string = 0 + let bytes = [0xc2, 0x40]; // tag 2, empty byte string + let mut decoder = Decoder::new(&bytes); + let result = decoder.big_integer().expect("should decode"); + assert_eq!(result.as_ref(), "0"); + } + + #[test] + fn big_integer_rejects_invalid_tag() { + // Tag 4 (decimal fraction) should be rejected. + let bytes = [0xc4, 0x82, 0x21, 0x19, 0x6a, 0xb3]; + let mut decoder = Decoder::new(&bytes); + assert!(decoder.big_integer().is_err()); + } + + #[test] + fn big_integer_decode_major_type_1_exceeding_i64() { + // CBOR major type 1 with argument u64::MAX (0x3b + 8 bytes of 0xff). + // Value = -1 - u64::MAX = -18446744073709551616. + // This exercises the minicbor Type::Int path in the decoder. + let bytes = [0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]; + let mut decoder = Decoder::new(&bytes); + let result = decoder + .big_integer() + .expect("should decode major type 1 > i64::MAX"); + assert_eq!(result.as_ref(), "-18446744073709551616"); + } + #[test] fn test_timestamp_integer_epoch_seconds() { // RFC 8949 §3.4.2: tag 1 content MUST be int OR float. diff --git a/rust-runtime/aws-smithy-cbor/src/encode.rs b/rust-runtime/aws-smithy-cbor/src/encode.rs index ce99b66ca4e..c40ba0d1214 100644 --- a/rust-runtime/aws-smithy-cbor/src/encode.rs +++ b/rust-runtime/aws-smithy-cbor/src/encode.rs @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -use aws_smithy_types::{Blob, DateTime}; +use aws_smithy_types::{BigInteger, Blob, DateTime}; /// Macro for delegating method calls to the encoder. /// @@ -126,6 +126,68 @@ impl Encoder { self } + /// Writes a `BigInteger` using preferred serialization per RFC 8949 §3.4.3. + /// + /// Values that fit in a CBOR major type 0 or 1 integer are encoded directly + /// (preferred serialization). Larger values use tag 2 (unsigned bignum) or + /// tag 3 (negative bignum). For tag 3, the byte string encodes `n` where + /// the value is `-1 - n`. + pub fn big_integer(&mut self, value: &BigInteger) -> &mut Self { + use num_bigint::{BigInt, Sign}; + + let n: BigInt = value + .as_ref() + .parse() + .expect("BigInteger contains invalid value"); + let (sign, magnitude) = n.to_bytes_be(); + + match sign { + Sign::Plus | Sign::NoSign => { + // Try preferred serialization as major type 0. + if magnitude.len() <= 8 { + let mut buf = [0u8; 8]; + buf[8 - magnitude.len()..].copy_from_slice(&magnitude); + let val = u64::from_be_bytes(buf); + self.encoder.u64(val).expect(INFALLIBLE_WRITE); + } else { + self.encoder + .tag(minicbor::data::Tag::new(2)) + .expect(INFALLIBLE_WRITE); + // Preferred serialization: strip leading zeroes. + let stripped = strip_leading_zeroes(&magnitude); + self.encoder.bytes(stripped).expect(INFALLIBLE_WRITE); + } + } + Sign::Minus => { + // Tag 3 value = -1 - n, so n = -1 - value = |value| - 1. + let one = BigInt::from(1u8); + let n = (-n) - one; + let (_, n_bytes) = n.to_bytes_be(); + + // Try preferred serialization as major type 1. + if n_bytes.len() <= 8 { + let mut buf = [0u8; 8]; + buf[8 - n_bytes.len()..].copy_from_slice(&n_bytes); + let val = u64::from_be_bytes(buf); + // Use i128 to represent -1 - val without overflow, then + // convert to minicbor::data::Int which covers the full + // CBOR major type 1 range. + let neg = -1i128 - (val as i128); + let int_val = minicbor::data::Int::try_from(neg) + .expect("value fits in CBOR integer range"); + self.encoder.int(int_val).expect(INFALLIBLE_WRITE); + } else { + self.encoder + .tag(minicbor::data::Tag::new(3)) + .expect(INFALLIBLE_WRITE); + let stripped = strip_leading_zeroes(&n_bytes); + self.encoder.bytes(stripped).expect(INFALLIBLE_WRITE); + } + } + } + self + } + /// Writes a blob. Collapses header+data into a single reserve+write. pub fn blob(&mut self, x: &Blob) -> &mut Self { let data = x.as_ref(); @@ -168,9 +230,15 @@ impl Encoder { } } +/// Strips leading zero bytes from a big-endian byte slice. +fn strip_leading_zeroes(bytes: &[u8]) -> &[u8] { + let start = bytes.iter().position(|&b| b != 0).unwrap_or(bytes.len()); + &bytes[start..] +} + #[cfg(test)] mod tests { - use super::Encoder; + use super::*; use aws_smithy_types::Blob; /// Verify our `str()` produces byte-identical output to minicbor's. @@ -293,4 +361,102 @@ mod tests { ); } } + + #[test] + fn preferred_serialization_small_positive() { + // Small values use major type 0 directly, not tag 2. + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"0".parse().unwrap()); + assert_eq!(encoder.into_writer(), vec![0x00]); // major type 0, value 0 + + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"23".parse().unwrap()); + assert_eq!(encoder.into_writer(), vec![0x17]); // major type 0, value 23 + + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"256".parse().unwrap()); + // major type 0, additional info 25 (2-byte), 0x0100 + assert_eq!(encoder.into_writer(), vec![0x19, 0x01, 0x00]); + } + + #[test] + fn preferred_serialization_small_negative() { + // Small negatives use major type 1 directly, not tag 3. + // Major type 1 value = -1 - argument. + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"-1".parse().unwrap()); + assert_eq!(encoder.into_writer(), vec![0x20]); // -1 = -1-0, argument 0 + + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"-42".parse().unwrap()); + // -42 = -1-41, argument 41 = 0x29 (major type 1, additional info 24, value 41) + assert_eq!(encoder.into_writer(), vec![0x38, 0x29]); + } + + #[test] + fn preferred_serialization_u64_max() { + // u64::MAX = 18446744073709551615 fits in major type 0. + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"18446744073709551615".parse().unwrap()); + let bytes = encoder.into_writer(); + assert_eq!(bytes[0], 0x1b); // major type 0, 8-byte argument + assert_eq!( + &bytes[1..], + &[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff] + ); + } + + #[test] + fn tag2_for_values_exceeding_u64() { + // 2^64 = 18446744073709551616 requires tag 2. + // RFC 8949 Appendix A: 0xc249010000000000000000 + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"18446744073709551616".parse().unwrap()); + let bytes = encoder.into_writer(); + assert_eq!( + bytes, + vec![0xc2, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] + ); + } + + #[test] + fn tag3_negative_bignum_rfc8949_example() { + // RFC 8949 Appendix A: -18446744073709551617 = 0xc349010000000000000000 + // value = -1 - n, n = 18446744073709551616 = 2^64 + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"-18446744073709551617".parse().unwrap()); + let bytes = encoder.into_writer(); + assert_eq!( + bytes, + vec![0xc3, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] + ); + } + + #[test] + fn negative_at_major_type_1_boundary() { + // -18446744073709551616 = -1 - 18446744073709551615 = -1 - u64::MAX + // This fits in major type 1 with 8-byte argument = u64::MAX. + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"-18446744073709551616".parse().unwrap()); + let bytes = encoder.into_writer(); + assert_eq!(bytes[0], 0x3b); // major type 1, 8-byte argument + assert_eq!( + &bytes[1..], + &[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff] + ); + } + + #[test] + fn tag2_strips_leading_zeroes() { + // A large number whose big-endian representation has no leading zeroes. + let mut encoder = Encoder::new(Vec::new()); + let large = "123456789012345678901234567890"; + encoder.big_integer(&large.parse().unwrap()); + let bytes = encoder.into_writer(); + assert_eq!(bytes[0], 0xc2); // tag 2 + // Verify the byte string has no leading zero bytes. + // bytes[1] is the CBOR byte string length header. + let payload_start = if bytes[1] < 0x58 { 2 } else { 3 }; + assert_ne!(bytes[payload_start], 0x00); + } } From 3bf7fe2b9703ffa5dcc15c5c38ee045a49333597 Mon Sep 17 00:00:00 2001 From: ysaito1001 Date: Tue, 2 Jun 2026 15:03:07 -0500 Subject: [PATCH 2/9] Pin badssl.com to pre-Ubuntu 24.04 commit (#4688) ## Motivation and Context Upstream commit bfc80f7 (https://github.com/chromium/badssl.com/commit/bfc80f7c2bf0873e2fdc9ba79f38a5afd93570fb) (Jun 1, 2026) added `@SECLEVEL=0` to nginx `ssl_ciphers` directives, which is not recognized by the OpenSSL 1.0.2g we build from source in `new-badssl-dockerfile`. This causes `nginx -t` to fail with `SSL_CIPHER_PROCESS_RULESTR:invalid command`. ## Description Pin `chromium/badssl.com` checkout to commit `6e53ae0` (pre-Ubuntu 24.04 upgrade) to fix the TLS CI build. Opened #4687 as a follow-up. ## Testing - CI ---- _By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._ --- .github/workflows/ci-tls.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci-tls.yml b/.github/workflows/ci-tls.yml index 02427ec5caf..2fcb99aa008 100644 --- a/.github/workflows/ci-tls.yml +++ b/.github/workflows/ci-tls.yml @@ -56,6 +56,8 @@ jobs: uses: actions/checkout@v4 with: repository: chromium/badssl.com + # TODO(smithy-rs#4687): Remove this pin once we upgrade OpenSSL to support @SECLEVEL=0 + ref: 6e53ae0859e678724d54eb4f64f839174c9b82e3 path: ./badssl.com - name: Install Rust uses: dtolnay/rust-toolchain@master From 2280dc539de9cc03edbcfa621f478afa8d69be43 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jun 2026 17:12:37 -0500 Subject: [PATCH 3/9] Bump openssl from 0.10.79 to 0.10.80 in /tools/ci-build/sdk-lints (#4680) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [openssl](https://github.com/rust-openssl/rust-openssl) from 0.10.79 to 0.10.80.
Release notes

Sourced from openssl's releases.

openssl-v0.10.80

What's Changed

Full Changelog: https://github.com/rust-openssl/rust-openssl/compare/openssl-v0.10.79...openssl-v0.10.80

Commits
  • 35be7ae Release openssl 0.10.80 and openssl-sys 0.9.116 (#2639)
  • 19eceb2 Fix output buffer overflow in cipher_update_inplace for AES key-wrap-with-pad...
  • b460eb3 Prefer Homebrew openssl@4 and stop looking for openssl@1.1 (#2633)
  • See full diff in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=openssl&package-manager=cargo&previous-version=0.10.79&new-version=0.10.80)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/smithy-lang/smithy-rs/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Aaron Todd --- tools/ci-build/sdk-lints/Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/ci-build/sdk-lints/Cargo.lock b/tools/ci-build/sdk-lints/Cargo.lock index 0d7e7d37e99..2b4fff2fa86 100644 --- a/tools/ci-build/sdk-lints/Cargo.lock +++ b/tools/ci-build/sdk-lints/Cargo.lock @@ -681,9 +681,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl" -version = "0.10.79" +version = "0.10.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf0b434746ee2832f4f0baf10137e1cabb18cbe6912c69e2e33263c45250f542" +checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967" dependencies = [ "bitflags 2.10.0", "cfg-if", @@ -712,9 +712,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.115" +version = "0.9.116" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "158fe5b292746440aa6e7a7e690e55aeb72d41505e2804c23c6973ad0e9c9781" +checksum = "f28a22dc7140cda5f096e5e7724a6962ca81a7f8bfd2979f9b18c11af56318c4" dependencies = [ "cc", "libc", From 6d3c30ff85ab955d7e69479c0a6f7027e9be2ec0 Mon Sep 17 00:00:00 2001 From: ysaito1001 Date: Mon, 8 Jun 2026 17:28:43 -0500 Subject: [PATCH 4/9] Lift patch-only version restriction on `aws-smithy-eventstream` (#4691) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Motivation and Context https://github.com/smithy-lang/smithy-rs/issues/3370 ## Description This PR lifts the restriction that `aws-smithy-eventstream` can only receive patch version bumps in `Cargo.toml`, which has prevented the crate from receiving minor version bumps, let alone becoming stable. The root cause is that `DeferredSignerSender`, a type stored in `ConfigBag`, is defined in `aws-smithy-eventstream` (an unstable 0.x crate). If the crate receives a minor bump (e.g., 0.60 → 0.61), Cargo treats these as semver-incompatible for 0.x crates and allows both to coexist in the dependency graph. Since `ConfigBag` uses `TypeId` for lookups, the old version's type differs from the new version's type, causing silent lookup failures that break event stream signing. The fix moves `DeferredSignerSender` and the `SignMessage` trait to `aws-smithy-types` (a stable 1.x crate). This is the only place in the crate hierarchy that avoids circular dependencies (and already has an `event_stream` module). Changes: - `aws-smithy-types` (bumped to 1.5.0): Add `DeferredSignerSender`, `DeferredSignerReceiver`, `SignMessage`, and associated error types to the existing `event_stream` module. - `aws-smithy-eventstream` (bumped to 0.60.21, still a patch version bump): Remove old `DeferredSignerSender` definition, re-export from `aws-smithy-types`. Adapt `DeferredSigner` to use `DeferredSignerReceiver`. - `aws-runtime` (bumped to 1.7.5): Import `DeferredSignerSender` from `aws-smithy-types` instead of `aws-smithy-eventstream`. - Remove the "only patch releases" restriction comment from `aws-smithy-eventstream/Cargo.toml`. ~**Note on `send` method signature change**: The `send` method on `DeferredSignerSender` previously took `Box` directly. Since moving the `SignMessage` trait to `aws-smithy-types` requires stabilizing the trait, the new `send` is generic (`send`) with the value type-erased internally via `Box`. This changes the method signature, but `send` is only called internally by `aws-runtime`; verified this via internal code search and public GitHub search. An alternative would be to also move `SignMessage` to `aws-smithy-types` to preserve the `send` method signature, but at the cost of committing to stabilizing the trait.~ ## Testing - CI - `cargo-semver-checks` reports `struct_missing` for `DeferredSignerSender` in `aws-smithy-eventstream` — this is expected, and the struct is replaced by a re-export from `aws-smithy-types` at the same path; the tool does not follow cross-crate re-exports of types. - Manual standalone test (uncommitted) that reproduces the hazard and verifies the fix
Standalone test crate details The test simulates two versions of `aws-smithy-eventstream` coexisting in a dependency graph — an SDK on 0.60.x and that on 0.61.0. It stores a `DeferredSignerSender` via the "old" eventstream and loads it via `aws-smithy-types` (as the new runtime would). **Setup**: ``` $ cd semver-test # Bump local eventstream to 0.61.0 to simulate a future minor bump $ sed -i '' 's/0.60.21/0.61.0/' ../rust-runtime/aws-smithy-eventstream/Cargo.toml # Create fake-0.60.21/ — a copy of the fixed eventstream at version 0.60.21 # (simulates what old SDKs resolve to after cargo update picks up the fix) $ cp -r ../rust-runtime/aws-smithy-eventstream ./fake-0.60.21 $ sed -i '' 's/0.61.0/0.60.21/' ./fake-0.60.21/Cargo.toml ``` `semver-test/src/main.rs` (shared by both cases): ``` use aws_smithy_types::config_bag::{ConfigBag, Layer}; use aws_smithy_types::event_stream::DeferredSignerSender; fn main() { // "Old SDK" stores DeferredSignerSender via eventstream let (_signer, sender) = aws_smithy_eventstream_old::frame::DeferredSigner::new(); let mut layer = Layer::new("test"); layer.store_put(sender); let bag = ConfigBag::of_layers(vec![layer]); // "New runtime" loads via aws-smithy-types directly let loaded = bag.load::(); assert!(loaded.is_some(), "SEMVER HAZARD: TypeId mismatch!"); println!("SUCCESS: DeferredSignerSender survives across eventstream version boundary!"); } ``` **Step 1: Reproduce the hazard (before fix)** Uses crates.io's 0.60.20 as the "old" dep — this version defines its own `DeferredSignerSender`: ``` [dependencies] aws-smithy-eventstream-old = { package = "aws-smithy-eventstream", version = "0.60.20" } # Local eventstream at 0.61.0 (simulates the minor bump) aws-smithy-eventstream-new = { package = "aws-smithy-eventstream", path = "../rust-runtime/aws-smithy-eventstream" } aws-smithy-types = { path = "../rust-runtime/aws-smithy-types" } [patch.crates-io] # Unifies aws-smithy-types — simulates 1.5.0 published on crates.io aws-smithy-types = { path = "../rust-runtime/aws-smithy-types" } ``` ``` $ cargo run SEMVER HAZARD: TypeId mismatch! ``` **Step 2: Verify the fix (simulating after 0.60.21 published)** Uses fake-0.60.21/ as the "old" dep — same fixed code, just at version 0.60.21 (uses `DeferredSignerSender` from `aws-smithy-types`): ``` [dependencies] aws-smithy-eventstream-old = { package = "aws-smithy-eventstream", path = "./fake-0.60.21" } # Local eventstream at 0.61.0 (simulates the minor bump) aws-smithy-eventstream-new = { package = "aws-smithy-eventstream", path = "../rust-runtime/aws-smithy-eventstream" } aws-smithy-types = { path = "../rust-runtime/aws-smithy-types" } # No [patch.crates-io] needed — all deps are local paths, single aws-smithy-types resolved naturally ``` ``` $ cargo run SUCCESS: DeferredSignerSender survives across eventstream version boundary! ``` **Revert after testing:** `$ sed -i '' 's/0.61.0/0.60.21/' ../rust-runtime/aws-smithy-eventstream/Cargo.toml` ---- _By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._ --- aws/rust-runtime/Cargo.lock | 6 +- aws/rust-runtime/aws-runtime/Cargo.toml | 2 +- .../aws-runtime/src/auth/sigv4.rs | 5 +- ...lientEventStreamMarshallerGeneratorTest.kt | 2 +- rust-runtime/Cargo.lock | 42 +++--- .../aws-smithy-eventstream/Cargo.toml | 4 +- .../aws-smithy-eventstream/src/frame.rs | 70 ++-------- rust-runtime/aws-smithy-types/Cargo.toml | 2 +- .../aws-smithy-types/src/event_stream.rs | 125 ++++++++++++++++++ 9 files changed, 171 insertions(+), 87 deletions(-) diff --git a/aws/rust-runtime/Cargo.lock b/aws/rust-runtime/Cargo.lock index d604d65dcee..838d5c81320 100644 --- a/aws/rust-runtime/Cargo.lock +++ b/aws/rust-runtime/Cargo.lock @@ -226,7 +226,7 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.20" +version = "0.60.21" dependencies = [ "aws-smithy-types", "bytes", @@ -254,7 +254,7 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.1.12" +version = "1.1.13" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -356,7 +356,7 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.4.9" +version = "1.5.0" dependencies = [ "base64-simd", "bytes", diff --git a/aws/rust-runtime/aws-runtime/Cargo.toml b/aws/rust-runtime/aws-runtime/Cargo.toml index 37ebbb08c95..6227867d7ed 100644 --- a/aws/rust-runtime/aws-runtime/Cargo.toml +++ b/aws/rust-runtime/aws-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-runtime" -version = "1.7.4" +version = "1.7.5" authors = ["AWS Rust SDK Team "] description = "Runtime support code for the AWS SDK. This crate isn't intended to be used directly." edition = "2021" diff --git a/aws/rust-runtime/aws-runtime/src/auth/sigv4.rs b/aws/rust-runtime/aws-runtime/src/auth/sigv4.rs index c59d7c0c166..2bbe8eefb44 100644 --- a/aws/rust-runtime/aws-runtime/src/auth/sigv4.rs +++ b/aws/rust-runtime/aws-runtime/src/auth/sigv4.rs @@ -263,7 +263,8 @@ impl Sign for SigV4Signer { #[cfg(feature = "event-stream")] { use crate::auth::sigv4::SigV4MessageSigner; - use aws_smithy_eventstream::frame::DeferredSignerSender; + use aws_smithy_eventstream::frame::SignMessage; + use aws_smithy_types::event_stream::DeferredSignerSender; if let Some(signer_sender) = config_bag.load::() { let time_source = runtime_components.time_source().unwrap_or_default(); @@ -282,7 +283,7 @@ impl Sign for SigV4Signer { name, time_source, (), - )) as _) + )) as Box) .expect("failed to send deferred signer"); } } diff --git a/codegen-client/src/test/kotlin/software/amazon/smithy/rust/codegen/client/smithy/protocols/eventstream/ClientEventStreamMarshallerGeneratorTest.kt b/codegen-client/src/test/kotlin/software/amazon/smithy/rust/codegen/client/smithy/protocols/eventstream/ClientEventStreamMarshallerGeneratorTest.kt index bee2956a347..c6eab25806f 100644 --- a/codegen-client/src/test/kotlin/software/amazon/smithy/rust/codegen/client/smithy/protocols/eventstream/ClientEventStreamMarshallerGeneratorTest.kt +++ b/codegen-client/src/test/kotlin/software/amazon/smithy/rust/codegen/client/smithy/protocols/eventstream/ClientEventStreamMarshallerGeneratorTest.kt @@ -269,7 +269,7 @@ class ClientEventStreamMarshallerGeneratorTest { ) -> Result<(), BoxError> { if let Some(signer_sender) = cfg.load::() { signer_sender - .send(Box::new(TestSigner)) + .send(Box::new(TestSigner) as Box) .expect("failed to send test signer"); } Ok(()) diff --git a/rust-runtime/Cargo.lock b/rust-runtime/Cargo.lock index 3e9c8c6c7d8..89b6ae8a98a 100644 --- a/rust-runtime/Cargo.lock +++ b/rust-runtime/Cargo.lock @@ -374,7 +374,7 @@ version = "0.61.10" dependencies = [ "aws-smithy-runtime-api 1.12.3", "aws-smithy-schema", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "criterion", "minicbor 2.2.2", "num-bigint", @@ -385,7 +385,7 @@ name = "aws-smithy-checksums" version = "0.64.8" dependencies = [ "aws-smithy-http 0.63.6", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "bytes", "bytes-utils", "crc-fast", @@ -408,7 +408,7 @@ name = "aws-smithy-compression" version = "0.1.6" dependencies = [ "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "bytes", "bytes-utils", "flate2", @@ -434,10 +434,10 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.20" +version = "0.60.21" dependencies = [ "arbitrary", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "bytes", "bytes-utils", "crc32fast", @@ -479,7 +479,7 @@ dependencies = [ "async-stream", "aws-smithy-eventstream", "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "bytes", "bytes-utils", "futures-core", @@ -503,7 +503,7 @@ dependencies = [ "aws-smithy-async 1.2.14", "aws-smithy-protocol-test", "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "base64 0.22.1", "bytes", "h2 0.3.27", @@ -575,7 +575,7 @@ dependencies = [ "aws-smithy-http 0.63.6", "aws-smithy-json 0.62.7", "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "aws-smithy-xml 0.60.15", "bytes", "futures-util", @@ -642,7 +642,7 @@ dependencies = [ "aws-smithy-http 0.63.6", "aws-smithy-json 0.62.7", "aws-smithy-legacy-http-server", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "aws-smithy-xml 0.60.15", "bytes", "futures", @@ -689,7 +689,7 @@ version = "0.62.7" dependencies = [ "aws-smithy-runtime-api 1.12.3", "aws-smithy-schema", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "proptest", "serde_json", ] @@ -702,7 +702,7 @@ dependencies = [ "aws-smithy-eventstream", "aws-smithy-http 0.63.6", "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "bytes", "bytes-utils", "futures-core", @@ -727,7 +727,7 @@ dependencies = [ "aws-smithy-json 0.62.7", "aws-smithy-legacy-http", "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "aws-smithy-xml 0.60.15", "bytes", "futures-util", @@ -757,7 +757,7 @@ dependencies = [ "aws-smithy-http-client", "aws-smithy-runtime", "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "http 1.4.0", "tokio", ] @@ -807,7 +807,7 @@ dependencies = [ name = "aws-smithy-query" version = "0.60.15" dependencies = [ - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "urlencoding", ] @@ -822,7 +822,7 @@ dependencies = [ "aws-smithy-observability", "aws-smithy-runtime-api 1.12.3", "aws-smithy-schema", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "bytes", "fastrand 2.4.1", "futures-util", @@ -863,7 +863,7 @@ version = "1.12.3" dependencies = [ "aws-smithy-async 1.2.14", "aws-smithy-runtime-api-macros", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "bytes", "http 0.2.12", "http 1.4.0", @@ -888,7 +888,7 @@ name = "aws-smithy-schema" version = "0.1.0" dependencies = [ "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "http 1.4.0", ] @@ -921,7 +921,7 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.4.9" +version = "1.5.0" dependencies = [ "base64 0.13.1", "base64-simd", @@ -958,7 +958,7 @@ name = "aws-smithy-types-convert" version = "0.60.14" dependencies = [ "aws-smithy-async 1.2.14", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "chrono", "futures-core", "time", @@ -970,7 +970,7 @@ version = "0.1.11" dependencies = [ "aws-smithy-async 1.2.14", "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "http-body-util", "sync_wrapper", "wstd", @@ -2503,7 +2503,7 @@ dependencies = [ "aws-smithy-json 0.62.7", "aws-smithy-runtime", "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.5.0", "aws-smithy-xml 0.60.15", "bytes", "fastrand 2.4.1", diff --git a/rust-runtime/aws-smithy-eventstream/Cargo.toml b/rust-runtime/aws-smithy-eventstream/Cargo.toml index 7683e53c1e2..29894d3b395 100644 --- a/rust-runtime/aws-smithy-eventstream/Cargo.toml +++ b/rust-runtime/aws-smithy-eventstream/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "aws-smithy-eventstream" -# Only patch releases can be made to this runtime crate until https://github.com/smithy-lang/smithy-rs/issues/3370 is resolved -version = "0.60.20" +# Only patch releases can be made to this runtime crate until 0.60.21 is published on crates.io +version = "0.60.21" # authors = ["AWS Rust SDK Team ", "John DiSanti "] description = "Event stream logic for smithy-rs." diff --git a/rust-runtime/aws-smithy-eventstream/src/frame.rs b/rust-runtime/aws-smithy-eventstream/src/frame.rs index a30a2015eee..514c5c58b98 100644 --- a/rust-runtime/aws-smithy-eventstream/src/frame.rs +++ b/rust-runtime/aws-smithy-eventstream/src/frame.rs @@ -8,15 +8,13 @@ use crate::buf::count::CountBuf; use crate::buf::crc::{CrcBuf, CrcBufMut}; use crate::error::{Error, ErrorKind}; -use aws_smithy_types::config_bag::{Storable, StoreReplace}; -use aws_smithy_types::event_stream::{Header, HeaderValue, Message}; +pub use aws_smithy_types::event_stream::DeferredSignerSender; +use aws_smithy_types::event_stream::{DeferredSignerReceiver, Header, HeaderValue, Message}; use aws_smithy_types::str_bytes::StrBytes; use aws_smithy_types::DateTime; use bytes::{Buf, BufMut}; -use std::error::Error as StdError; use std::fmt; use std::mem::size_of; -use std::sync::{mpsc, Mutex}; const PRELUDE_LENGTH_BYTES: u32 = 3 * size_of::() as u32; const PRELUDE_LENGTH_BYTES_USIZE: usize = PRELUDE_LENGTH_BYTES as usize; @@ -35,42 +33,7 @@ pub(crate) const TYPE_STRING: u8 = 7; pub(crate) const TYPE_TIMESTAMP: u8 = 8; pub(crate) const TYPE_UUID: u8 = 9; -pub type SignMessageError = Box; - -/// Signs an Event Stream message. -pub trait SignMessage: fmt::Debug { - fn sign(&mut self, message: Message) -> Result; - - /// SigV4 requires an empty last signed message to be sent. - /// Other protocols do not require one. - /// Return `Some(_)` to send a signed last empty message, before completing the stream. - /// Return `None` to not send one and terminate the stream immediately. - fn sign_empty(&mut self) -> Option>; -} - -/// A sender that gets placed in the request config to wire up an event stream signer after signing. -#[derive(Debug)] -#[non_exhaustive] -pub struct DeferredSignerSender(Mutex>>); - -impl DeferredSignerSender { - /// Creates a new `DeferredSignerSender` - fn new(tx: mpsc::Sender>) -> Self { - Self(Mutex::new(tx)) - } - - /// Sends a signer on the channel - pub fn send( - &self, - signer: Box, - ) -> Result<(), mpsc::SendError>> { - self.0.lock().unwrap().send(signer) - } -} - -impl Storable for DeferredSignerSender { - type Storer = StoreReplace; -} +pub use aws_smithy_types::event_stream::{SignMessage, SignMessageError}; /// Deferred event stream signer to allow a signer to be wired up later. /// @@ -89,19 +52,19 @@ impl Storable for DeferredSignerSender { /// for the remainder of the operation. #[derive(Debug)] pub struct DeferredSigner { - rx: Option>>>, + rx: Option, signer: Option>, } impl DeferredSigner { pub fn new() -> (Self, DeferredSignerSender) { - let (tx, rx) = mpsc::channel(); + let (rx, sender) = DeferredSignerSender::new(); ( Self { - rx: Some(Mutex::new(rx)), + rx: Some(rx), signer: None, }, - DeferredSignerSender::new(tx), + sender, ) } @@ -114,17 +77,10 @@ impl DeferredSigner { self.rx .take() .expect("only taken once") - .lock() - .unwrap() - .try_recv() - .ok() - // TODO(enableNewSmithyRuntimeCleanup): When the middleware implementation is removed, - // this should panic rather than default to the `NoOpSigner`. The reason it defaults - // is because middleware-based generic clients don't have any default middleware, - // so there is no way to send a `NoOpSigner` by default when there is no other - // auth scheme. The orchestrator auth setup is a lot more robust and will make - // this problem trivial. - .unwrap_or_else(|| Box::new(NoOpSigner {}) as _), + .recv::>() + // Fall back to NoOpSigner when no signer is sent (e.g., server-side + // event streams or tests that don't configure signing). + .unwrap_or_else(|_| Box::new(NoOpSigner {}) as _), ); self.acquire() } @@ -780,7 +736,9 @@ mod deferred_signer_tests { let (mut signer, sender) = check_send_sync(DeferredSigner::new()); - sender.send(Box::::default()).expect("success"); + sender + .send(Box::::default() as Box) + .expect("success"); let message = signer.sign(Message::new(Bytes::new())).expect("success"); assert_eq!(1, message.headers()[0].value().as_int32().unwrap()); diff --git a/rust-runtime/aws-smithy-types/Cargo.toml b/rust-runtime/aws-smithy-types/Cargo.toml index 5fd3cb24e42..35e4e96a568 100644 --- a/rust-runtime/aws-smithy-types/Cargo.toml +++ b/rust-runtime/aws-smithy-types/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-types" -version = "1.4.9" +version = "1.5.0" authors = [ "AWS Rust SDK Team ", "Russell Cohen ", diff --git a/rust-runtime/aws-smithy-types/src/event_stream.rs b/rust-runtime/aws-smithy-types/src/event_stream.rs index 0d98dabd991..0e47a4b9a87 100644 --- a/rust-runtime/aws-smithy-types/src/event_stream.rs +++ b/rust-runtime/aws-smithy-types/src/event_stream.rs @@ -5,8 +5,12 @@ //! Types relevant to event stream serialization/deserialization +use crate::config_bag::{Storable, StoreReplace}; use crate::str_bytes::StrBytes; use bytes::Bytes; +use std::any::Any; +use std::fmt; +use std::sync::{mpsc, Mutex}; mod value { use crate::str_bytes::StrBytes; @@ -201,3 +205,124 @@ impl RawMessage { Self::Invalid(bytes) } } + +/// Error returned when sending a deferred signer fails. +#[derive(Debug)] +pub struct DeferredSignerSendError { + kind: DeferredSignerSendErrorKind, +} + +#[derive(Debug)] +enum DeferredSignerSendErrorKind { + Closed, +} + +impl fmt::Display for DeferredSignerSendError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self.kind { + DeferredSignerSendErrorKind::Closed => f.write_str("receiver was dropped"), + } + } +} + +impl std::error::Error for DeferredSignerSendError {} + +/// Error returned when receiving a deferred signer fails. +#[derive(Debug)] +pub struct DeferredSignerRecvError { + kind: DeferredSignerRecvErrorKind, +} + +#[derive(Debug)] +enum DeferredSignerRecvErrorKind { + NoSigner, +} + +impl fmt::Display for DeferredSignerRecvError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self.kind { + DeferredSignerRecvErrorKind::NoSigner => f.write_str("no signer was available"), + } + } +} + +impl std::error::Error for DeferredSignerRecvError {} + +/// Receiver half of the deferred signer channel. +/// +/// Held internally by a deferred signer implementation to receive the concrete +/// signer once it becomes available after HTTP request signing. +#[derive(Debug)] +pub struct DeferredSignerReceiver { + rx: Mutex>>>, +} + +impl DeferredSignerReceiver { + /// Receives the value sent by the corresponding [`DeferredSignerSender`]. + /// + /// This consumes the receiver's channel on first call. Subsequent calls will + /// return an error. + pub fn recv(&self) -> Result { + let mut rx = self.rx.lock().unwrap(); + rx.take() + .and_then(|r| r.try_recv().ok()) + .and_then(|any| any.downcast::().ok()) + .map(|b| *b) + .ok_or(DeferredSignerRecvError { + kind: DeferredSignerRecvErrorKind::NoSigner, + }) + } +} + +/// Sender for wiring up an event stream message signer after HTTP request signing. +/// +/// During serialization, a [`DeferredSignerSender`] is placed in the config bag. +/// After HTTP signing completes, the auth scheme retrieves it and sends the +/// concrete signer implementation through the channel. +#[derive(Debug)] +pub struct DeferredSignerSender { + tx: Mutex>>, +} + +impl DeferredSignerSender { + /// Creates a new sender/receiver pair. + pub fn new() -> (DeferredSignerReceiver, Self) { + let (tx, rx) = mpsc::channel(); + ( + DeferredSignerReceiver { + rx: Mutex::new(Some(rx)), + }, + Self { tx: Mutex::new(tx) }, + ) + } + + /// Sends a value through the channel. + pub fn send(&self, value: T) -> Result<(), DeferredSignerSendError> { + self.tx + .lock() + .unwrap() + .send(Box::new(value)) + .map_err(|_| DeferredSignerSendError { + kind: DeferredSignerSendErrorKind::Closed, + }) + } +} + +impl Storable for DeferredSignerSender { + type Storer = StoreReplace; +} + +/// An error that occurs when signing an Event Stream message. +pub type SignMessageError = Box; + +/// Signs an Event Stream message. +pub trait SignMessage: fmt::Debug { + /// Signs a message, returning the signed version. + fn sign(&mut self, message: Message) -> Result; + + /// SigV4 requires an empty last signed message to be sent. + /// Other protocols do not require one. + /// Return `Some(_)` to send a signed last empty message, before completing the stream. + /// Return `None` to not send one and terminate the stream immediately. + fn sign_empty(&mut self) -> Option>; +} From 325e49e6fe67922d50ff829bc74113ac3a8bd6e2 Mon Sep 17 00:00:00 2001 From: AWS SDK Rust Bot <97246200+aws-sdk-rust-ci@users.noreply.github.com> Date: Thu, 11 Jun 2026 02:35:06 -0400 Subject: [PATCH 5/9] Run `cargo update` on the runtime lockfiles and the SDK lockfile (#4694) If CI fails, commit the necessary fixes to this PR until all checks pass. If changes are required to [crateNameToLastKnownWorkingVersions](https://github.com/smithy-lang/smithy-rs/blob/92916b5484cdfef9ff58540ebf5e845eeeccf860/aws/sdk/build.gradle.kts#L504), revert the first commit in the PR, run `./gradlew aws:sdk:cargoUpdateAllLockfiles`, and commit the updated lockfiles. --- aws/rust-runtime/Cargo.lock | 145 ++++++----- aws/rust-runtime/aws-config/Cargo.lock | 163 +++++++------ aws/sdk/Cargo.lock | 310 ++++++++++++------------ rust-runtime/Cargo.lock | 323 ++++++++++++------------- 4 files changed, 459 insertions(+), 482 deletions(-) diff --git a/aws/rust-runtime/Cargo.lock b/aws/rust-runtime/Cargo.lock index 838d5c81320..2e9757881bb 100644 --- a/aws/rust-runtime/Cargo.lock +++ b/aws/rust-runtime/Cargo.lock @@ -70,9 +70,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-credential-types" @@ -106,7 +106,7 @@ dependencies = [ "hex", "hmac 0.13.0", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -123,7 +123,7 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.7.4" +version = "1.7.5" dependencies = [ "arbitrary", "aws-credential-types", @@ -142,7 +142,7 @@ dependencies = [ "fastrand", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -180,7 +180,7 @@ dependencies = [ "hex-literal", "hmac 0.13.0", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "httparse", "p256", "percent-encoding", @@ -214,7 +214,7 @@ dependencies = [ "bytes", "crc-fast", "hex", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "md-5", @@ -243,7 +243,7 @@ dependencies = [ "bytes-utils", "futures-core", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "percent-encoding", @@ -310,7 +310,7 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -329,7 +329,7 @@ dependencies = [ "aws-smithy-types", "bytes", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pin-project-lite", "tokio", "tracing", @@ -351,7 +351,7 @@ version = "0.1.0" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", - "http 1.4.0", + "http 1.4.2", ] [[package]] @@ -363,7 +363,7 @@ dependencies = [ "bytes-utils", "futures-core", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -436,9 +436,9 @@ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "block-buffer" @@ -469,9 +469,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytes" @@ -516,9 +516,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.62" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", "shlex", @@ -532,9 +532,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "num-traits", ] @@ -593,9 +593,9 @@ checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "cmov" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" [[package]] name = "const-oid" @@ -853,9 +853,9 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", @@ -878,9 +878,9 @@ dependencies = [ [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "elliptic-curve" @@ -1094,7 +1094,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.4.0", + "http 1.4.2", "indexmap", "slab", "tokio", @@ -1194,9 +1194,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -1220,7 +1220,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.4.0", + "http 1.4.2", ] [[package]] @@ -1231,7 +1231,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "pin-project-lite", ] @@ -1446,13 +1446,12 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -1497,9 +1496,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" [[package]] name = "lru" @@ -1531,9 +1530,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "minimal-lexical" @@ -1543,9 +1542,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", @@ -1926,9 +1925,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" dependencies = [ "aho-corasick", "memchr", @@ -1955,9 +1954,9 @@ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rfc6979" @@ -2028,9 +2027,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -2251,9 +2250,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook-registry" @@ -2299,9 +2298,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -2476,7 +2475,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.3", + "socket2 0.6.4", "tokio-macros", "windows-sys 0.61.2", ] @@ -2611,9 +2610,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unarray" @@ -2629,9 +2628,9 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-xid" @@ -2665,9 +2664,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.23.1" +version = "1.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" dependencies = [ "js-sys", "wasm-bindgen", @@ -2745,9 +2744,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" dependencies = [ "cfg-if", "once_cell", @@ -2758,9 +2757,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2768,9 +2767,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" dependencies = [ "bumpalo", "proc-macro2", @@ -2781,9 +2780,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" dependencies = [ "unicode-ident", ] @@ -2824,9 +2823,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" dependencies = [ "js-sys", "wasm-bindgen", @@ -3049,9 +3048,9 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -3072,18 +3071,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote", diff --git a/aws/rust-runtime/aws-config/Cargo.lock b/aws/rust-runtime/aws-config/Cargo.lock index 6d868e6e462..3dbae82cd5c 100644 --- a/aws/rust-runtime/aws-config/Cargo.lock +++ b/aws/rust-runtime/aws-config/Cargo.lock @@ -35,9 +35,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-config" @@ -63,7 +63,7 @@ dependencies = [ "fastrand", "futures-util", "hex", - "http 1.4.0", + "http 1.4.2", "p256", "rand", "serde", @@ -114,7 +114,7 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.7.4" +version = "1.7.5" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -127,7 +127,7 @@ dependencies = [ "bytes", "bytes-utils", "fastrand", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "percent-encoding", "pin-project-lite", @@ -153,7 +153,7 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "regex-lite", "tracing", ] @@ -175,7 +175,7 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "regex-lite", "tracing", ] @@ -197,7 +197,7 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "regex-lite", "tracing", ] @@ -220,7 +220,7 @@ dependencies = [ "aws-types", "fastrand", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "regex-lite", "tracing", ] @@ -238,7 +238,7 @@ dependencies = [ "hex", "hmac 0.13.0", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "percent-encoding", "sha2 0.11.0", "time", @@ -264,7 +264,7 @@ dependencies = [ "bytes-utils", "futures-core", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "percent-encoding", @@ -275,7 +275,7 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.1.12" +version = "1.1.13" dependencies = [ "aws-smithy-async", "aws-smithy-protocol-test", @@ -285,11 +285,11 @@ dependencies = [ "h2 0.3.27", "h2 0.4.14", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "hyper 0.14.32", - "hyper 1.9.0", + "hyper 1.10.1", "hyper-rustls", "hyper-util", "indexmap", @@ -360,7 +360,7 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -380,7 +380,7 @@ dependencies = [ "aws-smithy-types", "bytes", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pin-project-lite", "tokio", "tracing", @@ -402,18 +402,18 @@ version = "0.1.0" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", - "http 1.4.0", + "http 1.4.2", ] [[package]] name = "aws-smithy-types" -version = "1.4.9" +version = "1.5.0" dependencies = [ "base64-simd", "bytes", "bytes-utils", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -476,9 +476,9 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "block-buffer" @@ -509,9 +509,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytes" @@ -550,9 +550,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.62" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", "jobserver", @@ -568,9 +568,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "num-traits", ] @@ -613,9 +613,9 @@ dependencies = [ [[package]] name = "cmov" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" [[package]] name = "const-oid" @@ -767,9 +767,9 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", @@ -798,9 +798,9 @@ dependencies = [ [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "elliptic-curve" @@ -1014,7 +1014,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.4.0", + "http 1.4.2", "indexmap", "slab", "tokio", @@ -1091,9 +1091,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -1117,7 +1117,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.4.0", + "http 1.4.2", ] [[package]] @@ -1128,7 +1128,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "pin-project-lite", ] @@ -1180,16 +1180,16 @@ dependencies = [ [[package]] name = "hyper" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", "h2 0.4.14", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "httparse", "itoa", @@ -1205,8 +1205,8 @@ version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ - "http 1.4.0", - "hyper 1.9.0", + "http 1.4.2", + "hyper 1.10.1", "hyper-util", "rustls", "rustls-native-certs", @@ -1225,14 +1225,14 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", - "hyper 1.9.0", + "hyper 1.10.1", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.3", + "socket2 0.6.4", "tokio", "tower-service", "tracing", @@ -1383,13 +1383,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -1428,9 +1427,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" [[package]] name = "matchers" @@ -1443,9 +1442,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "minimal-lexical" @@ -1455,9 +1454,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", @@ -1759,9 +1758,9 @@ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rfc6979" @@ -1821,9 +1820,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -2016,9 +2015,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook-registry" @@ -2064,9 +2063,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -2212,7 +2211,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.3", + "socket2 0.6.4", "tokio-macros", "windows-sys 0.61.2", ] @@ -2376,9 +2375,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" @@ -2424,9 +2423,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.23.1" +version = "1.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -2486,9 +2485,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" dependencies = [ "cfg-if", "once_cell", @@ -2499,9 +2498,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2509,9 +2508,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" dependencies = [ "bumpalo", "proc-macro2", @@ -2522,9 +2521,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" dependencies = [ "unicode-ident", ] @@ -2765,9 +2764,9 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -2788,18 +2787,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote", diff --git a/aws/sdk/Cargo.lock b/aws/sdk/Cargo.lock index c38c428851b..0447b0537ea 100644 --- a/aws/sdk/Cargo.lock +++ b/aws/sdk/Cargo.lock @@ -338,9 +338,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-config" @@ -366,7 +366,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "hex", - "http 1.4.0", + "http 1.4.2", "p256", "rand 0.8.6", "serde", @@ -435,7 +435,7 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.7.4" +version = "1.7.5" dependencies = [ "arbitrary", "aws-credential-types", @@ -454,7 +454,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -498,7 +498,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body-util", "proptest", "regex-lite", @@ -530,7 +530,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -560,7 +560,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -587,7 +587,7 @@ dependencies = [ "bytes", "fastrand 2.4.1", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "tokio", @@ -618,7 +618,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -649,7 +649,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -676,7 +676,7 @@ dependencies = [ "bytes", "fastrand 2.4.1", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "tokio", @@ -706,7 +706,7 @@ dependencies = [ "futures-util", "hex", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pretty_assertions", "proptest", "regex-lite", @@ -740,7 +740,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -770,7 +770,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -801,7 +801,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -833,7 +833,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "proptest", "regex-lite", @@ -862,7 +862,7 @@ dependencies = [ "aws-types", "fastrand 2.4.1", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pretty_assertions", "proptest", "regex-lite", @@ -903,7 +903,7 @@ dependencies = [ "hex", "hmac 0.13.0", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "lru", @@ -946,7 +946,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "md-5", "proptest", "regex-lite", @@ -974,7 +974,7 @@ dependencies = [ "bytes", "fastrand 2.4.1", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "tokio", @@ -1002,7 +1002,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -1028,7 +1028,7 @@ dependencies = [ "bytes", "fastrand 2.4.1", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "tokio", @@ -1052,7 +1052,7 @@ dependencies = [ "bytes", "fastrand 2.4.1", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "tokio", @@ -1080,7 +1080,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -1110,7 +1110,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -1137,7 +1137,7 @@ dependencies = [ "bytes", "fastrand 2.4.1", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "tokio", @@ -1170,7 +1170,7 @@ dependencies = [ "futures-util", "hound", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body-util", "proptest", "regex-lite", @@ -1197,7 +1197,7 @@ dependencies = [ "hex-literal", "hmac 0.13.0", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "httparse", "p256", "percent-encoding", @@ -1226,13 +1226,14 @@ dependencies = [ [[package]] name = "aws-smithy-cbor" -version = "0.61.9" +version = "0.61.10" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-schema", "aws-smithy-types", "criterion", "minicbor", + "num-bigint", ] [[package]] @@ -1245,7 +1246,7 @@ dependencies = [ "bytes-utils", "crc-fast", "hex", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "md-5", @@ -1268,7 +1269,7 @@ dependencies = [ "bytes-utils", "flate2", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "pin-project-lite", @@ -1289,7 +1290,7 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.20" +version = "0.60.21" dependencies = [ "arbitrary", "aws-smithy-types", @@ -1318,10 +1319,10 @@ dependencies = [ "bytes-utils", "futures-core", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", - "hyper 1.9.0", + "hyper 1.10.1", "percent-encoding", "pin-project-lite", "pin-utils", @@ -1343,12 +1344,12 @@ dependencies = [ "h2 0.3.27", "h2 0.4.14", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", "hyper 0.14.32", - "hyper 1.9.0", + "hyper 1.10.1", "hyper-rustls 0.24.2", "hyper-rustls 0.27.9", "hyper-util", @@ -1396,7 +1397,7 @@ dependencies = [ "futures-core", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "hyper 0.14.32", "percent-encoding", @@ -1416,7 +1417,7 @@ dependencies = [ "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", - "http 1.4.0", + "http 1.4.2", "tokio", ] @@ -1453,7 +1454,7 @@ dependencies = [ "cbor-diag", "ciborium", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pretty_assertions", "regex-lite", "roxmltree", @@ -1485,7 +1486,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -1508,7 +1509,7 @@ dependencies = [ "aws-smithy-types", "bytes", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pin-project-lite", "proptest", "tokio", @@ -1531,12 +1532,12 @@ version = "0.1.0" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", - "http 1.4.0", + "http 1.4.2", ] [[package]] name = "aws-smithy-types" -version = "1.4.9" +version = "1.5.0" dependencies = [ "base64 0.13.1", "base64-simd", @@ -1546,7 +1547,7 @@ dependencies = [ "criterion", "futures-core", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -1666,7 +1667,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -1676,7 +1677,7 @@ dependencies = [ "quote", "regex", "rustc-hash", - "shlex", + "shlex 1.3.0", "syn", ] @@ -1703,9 +1704,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "block-buffer" @@ -1749,9 +1750,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "byteorder" @@ -1802,14 +1803,14 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.62" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", "jobserver", "libc", - "shlex", + "shlex 2.0.1", ] [[package]] @@ -1829,9 +1830,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "num-traits", ] @@ -1910,9 +1911,9 @@ dependencies = [ [[package]] name = "cmov" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" [[package]] name = "concurrent-queue" @@ -2217,9 +2218,9 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", @@ -2248,9 +2249,9 @@ dependencies = [ [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "elliptic-curve" @@ -2630,7 +2631,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.4.0", + "http 1.4.2", "indexmap", "slab", "tokio", @@ -2802,9 +2803,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -2828,7 +2829,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.4.0", + "http 1.4.2", ] [[package]] @@ -2839,7 +2840,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "pin-project-lite", ] @@ -2891,16 +2892,16 @@ dependencies = [ [[package]] name = "hyper" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", "h2 0.4.14", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "httparse", "httpdate", @@ -2933,8 +2934,8 @@ version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ - "http 1.4.0", - "hyper 1.9.0", + "http 1.4.2", + "hyper 1.10.1", "hyper-util", "rustls 0.23.40", "rustls-native-certs", @@ -2953,14 +2954,14 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", - "hyper 1.9.0", + "hyper 1.10.1", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.3", + "socket2 0.6.4", "system-configuration", "tokio", "tower-layer", @@ -3116,7 +3117,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" dependencies = [ - "socket2 0.6.3", + "socket2 0.6.4", "widestring", "windows-registry", "windows-result", @@ -3196,13 +3197,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -3245,9 +3245,9 @@ dependencies = [ [[package]] name = "libmimalloc-sys" -version = "0.1.47" +version = "0.1.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d1eacfa31c33ec25e873c136ba5669f00f9866d0688bea7be4d3f7e43067df6" +checksum = "6a45a52f43e1c16f667ccfe4dd8c85b7f7c204fd5e3bf46c5b0db9a5c3c0b8e9" dependencies = [ "cc", ] @@ -3287,9 +3287,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" dependencies = [ "value-bag", ] @@ -3324,15 +3324,15 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "mimalloc" -version = "0.1.50" +version = "0.1.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3627c4272df786b9260cabaa46aec1d59c93ede723d4c3ef646c503816b0640" +checksum = "2d4139bb28d14ad1facf21d5eb8825051b326e172d216b39f6d31df53cc97862" dependencies = [ "libmimalloc-sys", ] @@ -3364,9 +3364,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", @@ -3741,7 +3741,7 @@ checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.11.1", + "bitflags 2.13.0", "num-traits", "rand 0.9.4", "rand_chacha 0.9.0", @@ -3873,14 +3873,14 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", ] [[package]] name = "regex" -version = "1.12.3" +version = "1.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" dependencies = [ "aho-corasick", "memchr", @@ -3907,9 +3907,9 @@ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "resolv-conf" @@ -3985,7 +3985,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -3998,7 +3998,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys 0.12.1", @@ -4035,9 +4035,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -4111,9 +4111,9 @@ checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "s2n-tls" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d22c36f207d0bb6a38272d5d1fa1cd99094335c70db1bfef54e0b8b672ae26f" +checksum = "f60ada8adc59c848686744ff0ca93f1d1edc565a69d96a58a26abd84a521a5a0" dependencies = [ "errno", "hex", @@ -4128,8 +4128,8 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f48b9922eed6521a7f9d5b444bcc36a5df988161b67579112cc5377ca021ed78" dependencies = [ - "http 1.4.0", - "hyper 1.9.0", + "http 1.4.2", + "hyper 1.10.1", "hyper-util", "s2n-tls", "s2n-tls-tokio", @@ -4138,9 +4138,9 @@ dependencies = [ [[package]] name = "s2n-tls-sys" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf9e3b136cdd2c99f0cee2811d80b9f6bc44b5fd48c172857de32babb506f5e" +checksum = "e6960ccb00e47fe4b641f9c7b769515a4f89cb65459ca7afbed20fa39aac0b1b" dependencies = [ "aws-lc-rs", "cc", @@ -4149,9 +4149,9 @@ dependencies = [ [[package]] name = "s2n-tls-tokio" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0ab00b075ab482e89509de51e1972a8f38ff70e1dbd5279caa0fd8d25f86cb" +checksum = "fdeee0425e44094040f5c3a065a6e42974e9bc1a7587a292f520715b0f9fbbd5" dependencies = [ "errno", "libc", @@ -4169,15 +4169,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "scc" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc" -dependencies = [ - "sdd", -] - [[package]] name = "schannel" version = "0.1.29" @@ -4203,12 +4194,6 @@ dependencies = [ "untrusted 0.9.0", ] -[[package]] -name = "sdd" -version = "3.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca" - [[package]] name = "sec1" version = "0.7.3" @@ -4229,7 +4214,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -4304,24 +4289,23 @@ dependencies = [ [[package]] name = "serial_test" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "911bd979bf1070a3f3aa7b691a3b3e9968f339ceeec89e08c280a8a22207a32f" +checksum = "699f4197115b8a7e7ff19c9a315a4bd6fffec26cc4626ef45ecaea389e081c6d" dependencies = [ "futures-executor", "futures-util", "log", "once_cell", "parking_lot", - "scc", "serial_test_derive", ] [[package]] name = "serial_test_derive" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7d91949b85b0d2fb687445e448b40d322b6b3e4af6b44a29b21d9a5f33e6d9" +checksum = "94e153fc76e1c6a068703d6d29c508a0b15c061c4b7e43da59cc097bc342673c" dependencies = [ "proc-macro2", "quote", @@ -4387,6 +4371,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + [[package]] name = "signal-hook-registry" version = "1.4.8" @@ -4464,9 +4454,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -4549,7 +4539,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -4710,7 +4700,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.3", + "socket2 0.6.4", "tokio-macros", "windows-sys 0.61.2", ] @@ -4919,9 +4909,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unarray" @@ -4937,9 +4927,9 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-xid" @@ -4985,9 +4975,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.23.1" +version = "1.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -5078,9 +5068,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" dependencies = [ "cfg-if", "once_cell", @@ -5091,9 +5081,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "54568702fabf5d4849ce2b90fadfa64168a097eaf4b351ce9df8b687a0086aaf" dependencies = [ "js-sys", "wasm-bindgen", @@ -5101,9 +5091,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5111,9 +5101,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" dependencies = [ "bumpalo", "proc-macro2", @@ -5124,9 +5114,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" dependencies = [ "unicode-ident", ] @@ -5159,7 +5149,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "hashbrown 0.15.5", "indexmap", "semver", @@ -5167,9 +5157,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" dependencies = [ "js-sys", "wasm-bindgen", @@ -5425,7 +5415,7 @@ version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", ] [[package]] @@ -5477,7 +5467,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.1", + "bitflags 2.13.0", "indexmap", "log", "serde", @@ -5523,7 +5513,7 @@ dependencies = [ "async-task", "bytes", "futures-lite 1.13.0", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "itoa", @@ -5559,9 +5549,9 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -5582,18 +5572,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote", diff --git a/rust-runtime/Cargo.lock b/rust-runtime/Cargo.lock index 89b6ae8a98a..8488d7a0f84 100644 --- a/rust-runtime/Cargo.lock +++ b/rust-runtime/Cargo.lock @@ -294,9 +294,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-lc-fips-sys" @@ -390,7 +390,7 @@ dependencies = [ "bytes-utils", "crc-fast", "hex", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "md-5 0.11.0", @@ -413,7 +413,7 @@ dependencies = [ "bytes-utils", "flate2", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "pin-project-lite", @@ -464,7 +464,7 @@ dependencies = [ "futures-core", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "percent-encoding", "pin-project-lite", @@ -484,10 +484,10 @@ dependencies = [ "bytes-utils", "futures-core", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", - "hyper 1.9.0", + "hyper 1.10.1", "percent-encoding", "pin-project-lite", "pin-utils", @@ -509,12 +509,12 @@ dependencies = [ "h2 0.3.27", "h2 0.4.14", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", "hyper 0.14.32", - "hyper 1.9.0", + "hyper 1.10.1", "hyper-rustls 0.24.2", "hyper-rustls 0.27.9", "hyper-util", @@ -522,7 +522,7 @@ dependencies = [ "pin-project-lite", "rustls 0.21.12", "rustls 0.23.40", - "rustls-native-certs 0.8.3", + "rustls-native-certs 0.8.4", "rustls-pemfile 2.2.0", "rustls-pki-types", "s2n-tls", @@ -579,12 +579,12 @@ dependencies = [ "aws-smithy-xml 0.60.15", "bytes", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", - "hyper 1.9.0", + "hyper 1.10.1", "hyper-util", - "lambda_http 1.2.0", + "lambda_http 1.2.1", "mime", "nom", "pin-project-lite", @@ -610,11 +610,11 @@ dependencies = [ "aws-smithy-legacy-http-server", "futures", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "hyper 0.14.32", - "hyper 1.9.0", + "hyper 1.10.1", "metrique", "metrique-core", "metrique-writer", @@ -708,7 +708,7 @@ dependencies = [ "futures-core", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "hyper 0.14.32", "percent-encoding", @@ -758,7 +758,7 @@ dependencies = [ "aws-smithy-runtime", "aws-smithy-runtime-api 1.12.3", "aws-smithy-types 1.5.0", - "http 1.4.0", + "http 1.4.2", "tokio", ] @@ -795,7 +795,7 @@ dependencies = [ "cbor-diag", "ciborium", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pretty_assertions", "regex-lite", "roxmltree", @@ -827,7 +827,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -851,7 +851,7 @@ dependencies = [ "aws-smithy-types 1.4.5", "bytes", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pin-project-lite", "tokio", "tracing", @@ -866,7 +866,7 @@ dependencies = [ "aws-smithy-types 1.5.0", "bytes", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pin-project-lite", "proptest", "tokio", @@ -889,7 +889,7 @@ version = "0.1.0" dependencies = [ "aws-smithy-runtime-api 1.12.3", "aws-smithy-types 1.5.0", - "http 1.4.0", + "http 1.4.2", ] [[package]] @@ -903,7 +903,7 @@ dependencies = [ "bytes-utils", "futures-core", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -931,7 +931,7 @@ dependencies = [ "criterion", "futures-core", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -1019,7 +1019,7 @@ checksum = "d02c123e89527e7b424f74f52d11be0d17ef2887819323a42dcae1c7630ca53d" dependencies = [ "base64 0.22.1", "bytes", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-serde 2.1.1", "query_map", @@ -1067,7 +1067,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -1077,7 +1077,7 @@ dependencies = [ "quote", "regex", "rustc-hash", - "shlex", + "shlex 1.3.0", "syn 2.0.117", ] @@ -1104,9 +1104,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "block-buffer" @@ -1150,9 +1150,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytes" @@ -1200,14 +1200,14 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.62" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", "jobserver", "libc", - "shlex", + "shlex 2.0.1", ] [[package]] @@ -1238,9 +1238,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "num-traits", ] @@ -1639,9 +1639,9 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", @@ -1662,9 +1662,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "encoding_rs" @@ -2011,7 +2011,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.4.0", + "http 1.4.2", "indexmap 2.14.0", "slab", "tokio", @@ -2154,9 +2154,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -2180,7 +2180,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.4.0", + "http 1.4.2", ] [[package]] @@ -2191,7 +2191,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "pin-project-lite", ] @@ -2218,7 +2218,7 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f056c8559e3757392c8d091e796416e4649d8e49e88b8d76df6c002f05027fd" dependencies = [ - "http 1.4.0", + "http 1.4.2", "serde", ] @@ -2269,16 +2269,16 @@ dependencies = [ [[package]] name = "hyper" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", "h2 0.4.14", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "httparse", "httpdate", @@ -2311,11 +2311,11 @@ version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ - "http 1.4.0", - "hyper 1.9.0", + "http 1.4.2", + "hyper 1.10.1", "hyper-util", "rustls 0.23.40", - "rustls-native-certs 0.8.3", + "rustls-native-certs 0.8.4", "tokio", "tokio-rustls 0.26.4", "tower-service", @@ -2331,14 +2331,14 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", - "hyper 1.9.0", + "hyper 1.10.1", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.3", + "socket2 0.6.4", "system-configuration", "tokio", "tower-layer", @@ -2509,7 +2509,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -2547,7 +2547,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" dependencies = [ - "socket2 0.6.3", + "socket2 0.6.4", "widestring", "windows-registry", "windows-result", @@ -2636,13 +2636,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -2681,19 +2680,19 @@ dependencies = [ [[package]] name = "lambda_http" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fc0b7ef9af5e63e348c4b11e7e31eab573603348b7eb9c3e831d8e87c1ecc" +checksum = "9f7f1395a7854d32e6f0c366448740dceb2e1bcb90bbbbf2785152e0ca3283e0" dependencies = [ "aws_lambda_events 1.2.0", "bytes", "encoding_rs", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", - "hyper 1.9.0", - "lambda_runtime 1.2.0", + "hyper 1.10.1", + "lambda_runtime 1.2.1", "mime", "percent-encoding", "pin-project-lite", @@ -2730,18 +2729,18 @@ dependencies = [ [[package]] name = "lambda_runtime" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc1b380b7fb92ddf3913b01f094c3fcf59e31d995bb609645cd64dcdb56ce63" +checksum = "4de91395937cd37777dce2c98ed95060a6fbd7dfaefb7ae3cc5fec84bb8379d0" dependencies = [ "async-stream", "base64 0.22.1", "bytes", "futures", - "http 1.4.0", + "http 1.4.2", "http-body-util", "http-serde 2.1.1", - "hyper 1.9.0", + "hyper 1.10.1", "lambda_runtime_api_client 1.0.3", "pin-project", "serde", @@ -2774,10 +2773,10 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", - "hyper 1.9.0", + "hyper 1.10.1", "hyper-util", "tower 0.5.3", "tracing", @@ -2814,9 +2813,9 @@ dependencies = [ [[package]] name = "libmimalloc-sys" -version = "0.1.47" +version = "0.1.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d1eacfa31c33ec25e873c136ba5669f00f9866d0688bea7be4d3f7e43067df6" +checksum = "6a45a52f43e1c16f667ccfe4dd8c85b7f7c204fd5e3bf46c5b0db9a5c3c0b8e9" dependencies = [ "cc", ] @@ -2844,9 +2843,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" dependencies = [ "value-bag", ] @@ -2882,9 +2881,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "memoffset" @@ -2928,9 +2927,9 @@ dependencies = [ [[package]] name = "metrique" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2638fb6c2325d3e35c7b0d1ce49cf8ce74b89b7439d4dc5ce1c9fff0f7fa18a1" +checksum = "ffdfd0c9954a916c5e1db230cc7593569858afec7744cebfd0fbef45de7b07c7" dependencies = [ "itoa", "metrique-core", @@ -2946,9 +2945,9 @@ dependencies = [ [[package]] name = "metrique-core" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b99ea3484ab9afe6337413bacc842d516e65623a476699f9873803028e6a9e" +checksum = "f56ef332b47a4d2dc14209bf9ce4334682dd2fec43a4b84e5ed063bf2f4ea29a" dependencies = [ "itertools 0.14.0", "metrique-writer-core", @@ -2956,9 +2955,9 @@ dependencies = [ [[package]] name = "metrique-macro" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a02c5cb6e55c1ec5eb3ef2d10d137805547c486ad54b587d42d0a49713e6ef9" +checksum = "403c61cd847b11680ae6cf1feb384cbe06e412e4dc221f1e16ccf48038d190bb" dependencies = [ "Inflector", "darling", @@ -2969,9 +2968,9 @@ dependencies = [ [[package]] name = "metrique-service-metrics" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb71714973a9ba53d609a577311aae4d8beb7df37869b5a92cb777a3f4c905b8" +checksum = "93045b7f5c8b998946b715de07523b1c6d81932512c5c27590bf73328aaf3832" dependencies = [ "metrique-writer", ] @@ -2984,9 +2983,9 @@ checksum = "d607939211e4eaaa8cd35394fa5e57faffb7390d0ac513b39992edcaf3cc526c" [[package]] name = "metrique-writer" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f770fe8a45a7c2f285c7ce81b9364e0e5604cbb7daf693fef1f624bf8f0bf8" +checksum = "ae9e23184d81616fcdfcdc5768e14c2bca765096094d08e7895259fe658378e4" dependencies = [ "ahash", "crossbeam-queue", @@ -3005,9 +3004,9 @@ dependencies = [ [[package]] name = "metrique-writer-core" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a0b67a72a8849987122ca8ceacaf81d47eaba36cd673767fc3742a086dd04ac" +checksum = "23421d85733c0182613b32f32094080e07cd5e98be5893f1cd3baf7eed16c4d0" dependencies = [ "derive-where", "itertools 0.14.0", @@ -3017,9 +3016,9 @@ dependencies = [ [[package]] name = "metrique-writer-format-emf" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee9bd51e4107aef22814491a9e2c5e59fe938609a83c31b6f2e76085cc48268" +checksum = "59fca512de7ed9e29644950426fe3810016fb8f8e478a779fffc33d45b9e9b4e" dependencies = [ "bit-set", "dtoa", @@ -3051,9 +3050,9 @@ dependencies = [ [[package]] name = "mimalloc" -version = "0.1.50" +version = "0.1.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3627c4272df786b9260cabaa46aec1d59c93ede723d4c3ef646c503816b0640" +checksum = "2d4139bb28d14ad1facf21d5eb8825051b326e172d216b39f6d31df53cc97862" dependencies = [ "libmimalloc-sys", ] @@ -3112,9 +3111,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", @@ -3502,7 +3501,7 @@ checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.11.1", + "bitflags 2.13.0", "num-traits", "rand 0.9.4", "rand_chacha 0.9.0", @@ -3776,7 +3775,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", ] [[package]] @@ -3817,14 +3816,14 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", ] [[package]] name = "regex" -version = "1.12.3" +version = "1.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" dependencies = [ "aho-corasick", "memchr", @@ -3851,9 +3850,9 @@ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "resolv-conf" @@ -3911,7 +3910,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys", @@ -3960,9 +3959,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe 0.2.1", "rustls-pki-types", @@ -4045,9 +4044,9 @@ checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "s2n-tls" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d22c36f207d0bb6a38272d5d1fa1cd99094335c70db1bfef54e0b8b672ae26f" +checksum = "f60ada8adc59c848686744ff0ca93f1d1edc565a69d96a58a26abd84a521a5a0" dependencies = [ "errno", "hex", @@ -4062,8 +4061,8 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f48b9922eed6521a7f9d5b444bcc36a5df988161b67579112cc5377ca021ed78" dependencies = [ - "http 1.4.0", - "hyper 1.9.0", + "http 1.4.2", + "hyper 1.10.1", "hyper-util", "s2n-tls", "s2n-tls-tokio", @@ -4072,9 +4071,9 @@ dependencies = [ [[package]] name = "s2n-tls-sys" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf9e3b136cdd2c99f0cee2811d80b9f6bc44b5fd48c172857de32babb506f5e" +checksum = "e6960ccb00e47fe4b641f9c7b769515a4f89cb65459ca7afbed20fa39aac0b1b" dependencies = [ "aws-lc-rs", "cc", @@ -4083,9 +4082,9 @@ dependencies = [ [[package]] name = "s2n-tls-tokio" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0ab00b075ab482e89509de51e1972a8f38ff70e1dbd5279caa0fd8d25f86cb" +checksum = "fdeee0425e44094040f5c3a065a6e42974e9bc1a7587a292f520715b0f9fbbd5" dependencies = [ "errno", "libc", @@ -4103,15 +4102,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "scc" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc" -dependencies = [ - "sdd", -] - [[package]] name = "schannel" version = "0.1.29" @@ -4137,19 +4127,13 @@ dependencies = [ "untrusted 0.9.0", ] -[[package]] -name = "sdd" -version = "3.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca" - [[package]] name = "security-framework" version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -4162,7 +4146,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -4260,24 +4244,23 @@ dependencies = [ [[package]] name = "serial_test" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "911bd979bf1070a3f3aa7b691a3b3e9968f339ceeec89e08c280a8a22207a32f" +checksum = "699f4197115b8a7e7ff19c9a315a4bd6fffec26cc4626ef45ecaea389e081c6d" dependencies = [ "futures-executor", "futures-util", "log", "once_cell", "parking_lot", - "scc", "serial_test_derive", ] [[package]] name = "serial_test_derive" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7d91949b85b0d2fb687445e448b40d322b6b3e4af6b44a29b21d9a5f33e6d9" +checksum = "94e153fc76e1c6a068703d6d29c508a0b15c061c4b7e43da59cc097bc342673c" dependencies = [ "proc-macro2", "quote", @@ -4321,6 +4304,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + [[package]] name = "signal-hook" version = "0.3.18" @@ -4378,9 +4367,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -4492,7 +4481,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -4688,7 +4677,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.3", + "socket2 0.6.4", "tokio-macros", "windows-sys 0.61.2", ] @@ -4814,9 +4803,9 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "bytes", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "pin-project-lite", "tokio", @@ -4967,9 +4956,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unarray" @@ -5033,9 +5022,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.23.1" +version = "1.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -5127,9 +5116,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" dependencies = [ "cfg-if", "once_cell", @@ -5140,9 +5129,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "54568702fabf5d4849ce2b90fadfa64168a097eaf4b351ce9df8b687a0086aaf" dependencies = [ "js-sys", "wasm-bindgen", @@ -5150,9 +5139,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5160,9 +5149,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" dependencies = [ "bumpalo", "proc-macro2", @@ -5173,9 +5162,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" dependencies = [ "unicode-ident", ] @@ -5208,7 +5197,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "hashbrown 0.15.5", "indexmap 2.14.0", "semver", @@ -5216,9 +5205,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" dependencies = [ "js-sys", "wasm-bindgen", @@ -5393,7 +5382,7 @@ version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", ] [[package]] @@ -5445,7 +5434,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.1", + "bitflags 2.13.0", "indexmap 2.14.0", "log", "serde", @@ -5491,7 +5480,7 @@ dependencies = [ "async-task", "bytes", "futures-lite 1.13.0", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "itoa", @@ -5536,9 +5525,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -5559,18 +5548,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote", From 62028c3457eb372f2dd13f28c760d441b155ffcb Mon Sep 17 00:00:00 2001 From: AWS SDK Rust Bot Date: Thu, 11 Jun 2026 20:45:40 +0000 Subject: [PATCH 6/9] chore: release 1.1.7 --- .changelog/cbor-big-integer.md | 9 ----- CHANGELOG.md | 10 +++++ aws/SDK_CHANGELOG.next.json | 71 ++++++++++------------------------ 3 files changed, 30 insertions(+), 60 deletions(-) delete mode 100644 .changelog/cbor-big-integer.md diff --git a/.changelog/cbor-big-integer.md b/.changelog/cbor-big-integer.md deleted file mode 100644 index c7a2a2b50bc..00000000000 --- a/.changelog/cbor-big-integer.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -applies_to: ["client", "server"] -authors: ["ethoman"] -references: ["smithy-rs#4473"] -breaking: false -new_feature: true -bug_fix: false ---- -Add CBOR encoding and decoding support for `BigInteger` using CBOR tags 2 (positive bignum) and 3 (negative bignum) as specified by RFC 8949 §3.4.3 and the Smithy RPC v2 CBOR protocol. Values that fit in CBOR major types 0 or 1 use preferred serialization (plain integers) instead of bignum tags. diff --git a/CHANGELOG.md b/CHANGELOG.md index 9397b2c5e73..51e8f9b526b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,14 @@ +June 11th, 2026 +=============== +**New this release:** +- :tada: (all, [smithy-rs#4473](https://github.com/smithy-lang/smithy-rs/issues/4473), @ethoman) Add CBOR encoding and decoding support for `BigInteger` using CBOR tags 2 (positive bignum) and 3 (negative bignum) as specified by RFC 8949 §3.4.3 and the Smithy RPC v2 CBOR protocol. Values that fit in CBOR major types 0 or 1 use preferred serialization (plain integers) instead of bignum tags. + +**Contributors** +Thank you for your contributions! ❤ +- @ethoman ([smithy-rs#4473](https://github.com/smithy-lang/smithy-rs/issues/4473)) + + June 1st, 2026 ============== **New this release:** diff --git a/aws/SDK_CHANGELOG.next.json b/aws/SDK_CHANGELOG.next.json index 5381127db43..7f0c76bf984 100644 --- a/aws/SDK_CHANGELOG.next.json +++ b/aws/SDK_CHANGELOG.next.json @@ -5,37 +5,6 @@ { "smithy-rs": [], "aws-sdk-rust": [ - { - "message": "Change sha1 calculation in aws-config from ring to sha1 crate.\n", - "meta": { - "bug": false, - "breaking": false, - "tada": false - }, - "author": "markuskobler", - "references": [ - "aws-sdk-rust#1317" - ], - "since-commit": "81d71b3312e7063e663909d5bb14443ad57c9e2a", - "age": 5 - }, - { - "message": "Fix bug where initial-request messages in event stream operations are not signed.\n", - "meta": { - "bug": true, - "breaking": false, - "tada": false - }, - "author": [ - "rcoh", - "ysaito1001" - ], - "references": [ - "smithy-rs#4429" - ], - "since-commit": "81d71b3312e7063e663909d5bb14443ad57c9e2a", - "age": 5 - }, { "message": "Fix null value handling in dense collections: SDK now correctly rejects null values in non-sparse collections instead of silently dropping them.\n", "meta": { @@ -46,7 +15,7 @@ "author": "vcjana", "references": [], "since-commit": "2d226ef3c59de83febdc6790e2bf2a44f43f1d1f", - "age": 4 + "age": 5 }, { "message": "Prevent memory leak in identity cache when overriding credentials via `config_override`. Each `config_override` that sets a credentials provider now uses an operation-scoped identity cache instead of the shared client-level cache, preventing unbounded partition growth. Additionally, the client-level identity cache now enforces a configurable `max_partitions` cap (default: 64) as a safety net.\n", @@ -60,7 +29,7 @@ "smithy-rs#4340" ], "since-commit": "00c6d6096f0d618545a7dece903770d8acb21114", - "age": 3 + "age": 4 }, { "message": "Fix `TokenBucket::is_full()` and `TokenBucket::is_empty()` to convert fractional tokens into whole permits before checking availability. Previously, accumulated fractional tokens from success rewards were not accounted for, causing these methods to return incorrect results.\n", @@ -75,7 +44,7 @@ "aws-sdk-rust#1423" ], "since-commit": "00c6d6096f0d618545a7dece903770d8acb21114", - "age": 3 + "age": 4 }, { "message": "Make `ProviderConfig::with_use_fips()` and `ProviderConfig::with_use_dual_stack()` public so that applications constructing a `ProviderConfig` directly can propagate FIPS and dual-stack settings to credential providers.\n", @@ -89,7 +58,7 @@ "smithy-rs#4551" ], "since-commit": "00c6d6096f0d618545a7dece903770d8acb21114", - "age": 3 + "age": 4 }, { "message": "Upgrade `sha2` from 0.10.x to 0.11.x. The previous version defaulted to software-based compression instead of hardware-accelerated compression, resulting in lower throughput. The new version automatically detects and uses hardware-accelerated instructions when available.\n", @@ -103,7 +72,7 @@ "smithy-rs#4587" ], "since-commit": "00c6d6096f0d618545a7dece903770d8acb21114", - "age": 3 + "age": 4 }, { "message": "Optimize `Encoder::str()` and `Encoder::blob()` by collapsing multiple `write_all` calls into a single buffer operation. This bypasses minicbor's generic writer to write the CBOR type+length header and payload directly into the underlying `Vec`, improving performance on serialization-heavy hot paths.\n", @@ -117,7 +86,7 @@ "smithy-rs#4591" ], "since-commit": "00c6d6096f0d618545a7dece903770d8acb21114", - "age": 3 + "age": 4 }, { "message": "Fix waiter codegen failure when JMESPath `&&` or `||` expressions have non-boolean operands (e.g., a list field used as a truthiness check). Non-boolean types are now coerced to booleans using JMESPath truthiness rules: arrays and strings check `!is_empty()`, all other non-null types are truthy.\n", @@ -131,7 +100,7 @@ "smithy-rs#4599" ], "since-commit": "00c6d6096f0d618545a7dece903770d8acb21114", - "age": 3 + "age": 4 }, { "message": "Add `sigv4a_signing_region_set` client configuration. Supports programmatic, environment variable (`AWS_SIGV4A_SIGNING_REGION_SET`), and shared config file (`sigv4a_signing_region_set`) configuration. User-provided values now take priority over endpoint-resolved values.\n", @@ -145,7 +114,7 @@ "smithy-rs#4521" ], "since-commit": "00c6d6096f0d618545a7dece903770d8acb21114", - "age": 3 + "age": 4 }, { "message": "Add missing `EventOrInitial`, `EventOrInitialMarshaller`, and `EventStreamSender::into_inner` to `aws-smithy-legacy-http` event_stream module, fixing compilation failures in generated SDKs that reference these types.\n", @@ -159,7 +128,7 @@ "smithy-rs#4431" ], "since-commit": "00c6d6096f0d618545a7dece903770d8acb21114", - "age": 3 + "age": 4 }, { "message": "Upgrade `p256` from 0.11 to 0.13.2 in `aws-sigv4` so the SigV4a signing path uses the same major version already pulled in elsewhere in the SDK and benefits from upstream maintenance fixes.\n", @@ -173,7 +142,7 @@ "smithy-rs#4648" ], "since-commit": "c29cba1fa16dbda9697f523e86ca9bb5ec2f6d67", - "age": 2 + "age": 3 }, { "message": "Implement retry behavior 2.1, opt-in via `AWS_NEW_RETRIES_2026=true` environment variable. Non-throttling errors now use 50ms base backoff (previously 1,000ms). Transient retry quota cost is 14 tokens (previously 5). DynamoDB and DynamoDB Streams use a 25ms base backoff and increase default max attempts to 4 (from 3). Long-polling operations (SQS `ReceiveMessage`, SFN `GetActivityTask`, SWF `PollForActivityTask`/`PollForDecisionTask`) backoff even when the retry token bucket is empty.\n", @@ -187,7 +156,7 @@ "smithy-rs#4638" ], "since-commit": "c29cba1fa16dbda9697f523e86ca9bb5ec2f6d67", - "age": 2 + "age": 3 }, { "message": "Remove the `ring` dependency from `aws-sigv4`. The `sigv4a` feature previously pulled in `ring` solely for HMAC-SHA256 in the SigV4a signing-key derivation; this is now done with the `hmac`/`sha2` (RustCrypto) crates that were already used by the SigV4 signer. `ring` is in maintenance hibernation, and the original reason for using it (a version conflict with the older `p256` crate at the time SigV4a was introduced) no longer applies. Users of the `sigv4a` feature will see `ring` removed from their dependency tree.\n", @@ -201,7 +170,7 @@ "smithy-rs#4650" ], "since-commit": "c29cba1fa16dbda9697f523e86ca9bb5ec2f6d67", - "age": 2 + "age": 3 }, { "message": "Fix `ProfileFileCredentialsProvider` so that profile-level `use_fips_endpoint` and `use_dualstack_endpoint` settings are propagated to the internal STS client used during assume-role credential chaining. Previously these settings were only applied when the provider was built through `aws_config::ConfigLoader::load`, so users constructing `ProfileFileCredentialsProvider` directly via its builder would see STS requests go to non-FIPS / non-dual-stack endpoints even when the selected profile enabled them.\n", @@ -215,7 +184,7 @@ "smithy-rs#4614" ], "since-commit": "c29cba1fa16dbda9697f523e86ca9bb5ec2f6d67", - "age": 2 + "age": 3 }, { "message": "Fix adaptive retry rate limiter to never allow negative token bucket capacity. Previously, `acquire_permission_to_send_a_request` unconditionally deducted the request cost even when returning a delay, causing capacity to go negative. With multiple concurrent tasks, this produced cascading sleep times proportional to the number of tasks (e.g., task 50 sleeping 100s), leading to near-zero request rates that never recovered after a throttling event. Now, capacity is only deducted when a token is actually granted, and the orchestrator re-acquires after sleeping to account for concurrent state changes.\n", @@ -229,7 +198,7 @@ "smithy-rs#4632" ], "since-commit": "c29cba1fa16dbda9697f523e86ca9bb5ec2f6d67", - "age": 2 + "age": 3 }, { "message": "Optimized BDD endpoint resolution performance by replacing HashMap-based auth schemes with a typed `EndpointAuthScheme` struct, inlining the BDD evaluation loop, and adding a single-entry endpoint cache. The BDD resolver is now up to 49% faster than the original implementation and outperforms the tree-based resolver on most benchmarks.\n", @@ -241,7 +210,7 @@ "author": "lnj", "references": [], "since-commit": "c29cba1fa16dbda9697f523e86ca9bb5ec2f6d67", - "age": 2 + "age": 3 }, { "message": "Improve the `Debug` output of HTTP `Headers` and `Request` in `aws-smithy-runtime-api` to redact values of headers commonly used to carry sensitive data. The header name remains visible and the value is replaced with a placeholder that includes the original byte length to preserve diagnostic utility. The `aws-sigv4` signer applies the same redaction when logging the canonical request. The plain `Display` impl on `CanonicalRequest` is unchanged to preserve the raw canonical form used by downstream consumers.\n", @@ -253,7 +222,7 @@ "author": "aajtodd", "references": [], "since-commit": "8f0882046c467981ba5b4fd91a10befa96bd262f", - "age": 1 + "age": 2 }, { "message": "Fix paginator codegen for operations whose `@paginated` `outputToken` targets a `@required` member. Previously, the generated `src/lens.rs` borrowing accessor emitted a direct field access (`input.field`) instead of a reference (`&input.field`) for required members, causing a type mismatch (`Option<&String>` vs `String`).\n", @@ -265,7 +234,7 @@ "author": "vcjana", "references": [], "since-commit": "8f0882046c467981ba5b4fd91a10befa96bd262f", - "age": 1 + "age": 2 }, { "message": "Fix `ConnectorBuilder::default()` to enable `TCP_NODELAY` by default. Previously, the auto-derived `Default` impl left `enable_tcp_nodelay` at `false`, while the curated `Connector::builder()` initialized it to `true`. The `Default` impl on `ConnectorBuilder` is now hand-written to match `Connector::builder()`, so all construction paths, including the SDK's `default_https_client`, get `enable_tcp_nodelay = true` consistently. Without `TCP_NODELAY`, Nagle's algorithm can hold small writes in the kernel waiting for ACKs; on request shapes emitted as multiple small sub-MSS writes, such as the tested HTTP/2 small-body SDK path where HEADERS and DATA are flushed separately, this can add roughly one RTT plus delayed-ACK time. Callers who relied on the previous unintended `enable_tcp_nodelay = false` default of `ConnectorBuilder::default()` can restore that behavior with `.enable_tcp_nodelay(false)`.\n", @@ -277,7 +246,7 @@ "author": "PeterUlb", "references": [], "since-commit": "8f0882046c467981ba5b4fd91a10befa96bd262f", - "age": 1 + "age": 2 }, { "message": "Implement `serde::Serializer` and `serde::Deserializer` traits for `aws_smithy_types::Document`, allowing it to be used as a self-describing data format. This enables converting any `Serialize` type into a `Document` via `to_document()` and deserializing a `Document` into any `Deserialize` type via `from_document()`.\n", @@ -289,7 +258,7 @@ "author": "dnorred", "references": [], "since-commit": "8f0882046c467981ba5b4fd91a10befa96bd262f", - "age": 1 + "age": 2 }, { "message": "Redact the `AWS_CONTAINER_AUTHORIZATION_TOKEN` value from WARN log output and error `Display` output when the ECS/EKS container credential provider rejects the token as invalid for use as an HTTP header. Previously, if the token contained a byte rejected by `HeaderValue` validation, it was logged at WARN level and embedded in the error string propagated through the credential chain. The value is now redacted.\n", @@ -301,7 +270,7 @@ "author": "aajtodd", "references": [], "since-commit": "8f0882046c467981ba5b4fd91a10befa96bd262f", - "age": 1 + "age": 2 } ], "aws-sdk-model": [] From b5cec4cceb793c0f064cc3bcf04d0a290873b41f Mon Sep 17 00:00:00 2001 From: vcjana Date: Fri, 12 Jun 2026 12:49:23 -0700 Subject: [PATCH 7/9] Make blanket From impls concrete to fix E0119 (time 0.3.48) (#4699) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #4698. ## Motivation and Context time 0.3.48 added impl From for ::Type (time-rs/time#783), which conflicts with any local blanket impl From and breaks the build with E0119: ``` error[E0119]: conflicting implementations of trait `From<...HourBase>` = note: conflicting implementation in crate `time` ``` smithy-rs has several such blanket impls, so it breaks wherever time resolves fresh to 0.3.48 (generated SDK build, TLS job, etc.). ## Description Fix at the dependency layer instead of narrowing every blanket impl (whack-a-mole + public-API breaks): - **Constrain time to `<0.3.48`** in aws-smithy-types. Everything routes through it, so cargo's version intersection forces time `0.3.47` across all build paths (and it's copied verbatim into the generated SDK). - **Defense in depth:** pin time →` 0.3.47` in the broken-dependency map in aws/sdk/build.gradle.kts. - **Hygiene:** make the private CanDisable blanket concrete (From). No public API changes. ## Testing - cargo update -p time holds at 0.3.47 (not 0.3.48) in both workspaces. - E2E:` ./gradlew :aws:sdk:assemble`; generated aws-smithy-types/Cargo.toml carries the bound; in the generated SDK, cargo check -p aws-smithy-runtime-api compiles with no E0119. - cargo fmt --check, runtime-versioner audit, sdk-lints pass. - **Check PR semver compliance fails as a false positive:** cargo-semver-checks builds the main baseline, which predates the constraint and can't compile against time 0.3.48. Not an API break (only private CanDisable changed); resolves once this lands on main or time 0.3.49 ships. ## Checklist - [x] Changelog entry added for client/server (applies_to). - [x] Changelog entry added for aws-sdk-rust. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --- .../fix-candisable-blanket-from-impl.md | 16 ++++++++ aws/rust-runtime/Cargo.lock | 2 +- aws/sdk/build.gradle.kts | 1 + rust-runtime/Cargo.lock | 40 +++++++++---------- rust-runtime/aws-smithy-types/Cargo.toml | 6 ++- rust-runtime/aws-smithy-types/src/timeout.rs | 6 ++- 6 files changed, 46 insertions(+), 25 deletions(-) create mode 100644 .changelog/fix-candisable-blanket-from-impl.md diff --git a/.changelog/fix-candisable-blanket-from-impl.md b/.changelog/fix-candisable-blanket-from-impl.md new file mode 100644 index 00000000000..f298e62cc88 --- /dev/null +++ b/.changelog/fix-candisable-blanket-from-impl.md @@ -0,0 +1,16 @@ +--- +applies_to: +- client +- server +- aws-sdk-rust +authors: +- vcjana +references: [] +breaking: false +new_feature: false +bug_fix: true +--- + +Make `CanDisable`'s `From` impl in `aws-smithy-types` concrete (`From`) instead of a blanket `impl From`. The blanket impl could clash with `From` impls from other crates and break the build with `error[E0119]` on a routine dependency bump (it surfaced via `time 0.3.48`). + +Additionally, constrain the `time` dependency to `<0.3.48` in `aws-smithy-types`. `time 0.3.48` introduced an E0119 coherence regression () that breaks any crate with a blanket `From` impl when `time` is in its dependency graph. Constraining `time` forces resolution to the last-good `0.3.47` across all build paths. Relax this bound once `time 0.3.49` ships. diff --git a/aws/rust-runtime/Cargo.lock b/aws/rust-runtime/Cargo.lock index 2e9757881bb..fb1ef471a11 100644 --- a/aws/rust-runtime/Cargo.lock +++ b/aws/rust-runtime/Cargo.lock @@ -356,7 +356,7 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.5.0" +version = "1.5.1" dependencies = [ "base64-simd", "bytes", diff --git a/aws/sdk/build.gradle.kts b/aws/sdk/build.gradle.kts index 39f9d816c08..02416fedf9b 100644 --- a/aws/sdk/build.gradle.kts +++ b/aws/sdk/build.gradle.kts @@ -441,6 +441,7 @@ fun Project.registerDowngradeFor( "libfuzzer-sys" to "0.4.7", // TODO(https://github.com/rust-fuzz/libfuzzer/issues/126) "crc-fast" to "1.9.0", // TODO(https://github.com/smithy-lang/smithy-rs/issues/3981) "serde_json" to "1.0.146", // TODO(https://github.com/serde-rs/json/issues/1309) + "time" to "0.3.47", // TODO(https://github.com/time-rs/time/issues/783): 0.3.48 has an E0119 regression; remove once 0.3.49 ships ) crateNameToLastKnownWorkingVersions.forEach { (crate, version) -> diff --git a/rust-runtime/Cargo.lock b/rust-runtime/Cargo.lock index 8488d7a0f84..dd2b2f89546 100644 --- a/rust-runtime/Cargo.lock +++ b/rust-runtime/Cargo.lock @@ -374,7 +374,7 @@ version = "0.61.10" dependencies = [ "aws-smithy-runtime-api 1.12.3", "aws-smithy-schema", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "criterion", "minicbor 2.2.2", "num-bigint", @@ -385,7 +385,7 @@ name = "aws-smithy-checksums" version = "0.64.8" dependencies = [ "aws-smithy-http 0.63.6", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "bytes", "bytes-utils", "crc-fast", @@ -408,7 +408,7 @@ name = "aws-smithy-compression" version = "0.1.6" dependencies = [ "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "bytes", "bytes-utils", "flate2", @@ -437,7 +437,7 @@ name = "aws-smithy-eventstream" version = "0.60.21" dependencies = [ "arbitrary", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "bytes", "bytes-utils", "crc32fast", @@ -479,7 +479,7 @@ dependencies = [ "async-stream", "aws-smithy-eventstream", "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "bytes", "bytes-utils", "futures-core", @@ -503,7 +503,7 @@ dependencies = [ "aws-smithy-async 1.2.14", "aws-smithy-protocol-test", "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "base64 0.22.1", "bytes", "h2 0.3.27", @@ -575,7 +575,7 @@ dependencies = [ "aws-smithy-http 0.63.6", "aws-smithy-json 0.62.7", "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "aws-smithy-xml 0.60.15", "bytes", "futures-util", @@ -642,7 +642,7 @@ dependencies = [ "aws-smithy-http 0.63.6", "aws-smithy-json 0.62.7", "aws-smithy-legacy-http-server", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "aws-smithy-xml 0.60.15", "bytes", "futures", @@ -689,7 +689,7 @@ version = "0.62.7" dependencies = [ "aws-smithy-runtime-api 1.12.3", "aws-smithy-schema", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "proptest", "serde_json", ] @@ -702,7 +702,7 @@ dependencies = [ "aws-smithy-eventstream", "aws-smithy-http 0.63.6", "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "bytes", "bytes-utils", "futures-core", @@ -727,7 +727,7 @@ dependencies = [ "aws-smithy-json 0.62.7", "aws-smithy-legacy-http", "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "aws-smithy-xml 0.60.15", "bytes", "futures-util", @@ -757,7 +757,7 @@ dependencies = [ "aws-smithy-http-client", "aws-smithy-runtime", "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "http 1.4.2", "tokio", ] @@ -807,7 +807,7 @@ dependencies = [ name = "aws-smithy-query" version = "0.60.15" dependencies = [ - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "urlencoding", ] @@ -822,7 +822,7 @@ dependencies = [ "aws-smithy-observability", "aws-smithy-runtime-api 1.12.3", "aws-smithy-schema", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "bytes", "fastrand 2.4.1", "futures-util", @@ -863,7 +863,7 @@ version = "1.12.3" dependencies = [ "aws-smithy-async 1.2.14", "aws-smithy-runtime-api-macros", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "bytes", "http 0.2.12", "http 1.4.2", @@ -888,7 +888,7 @@ name = "aws-smithy-schema" version = "0.1.0" dependencies = [ "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "http 1.4.2", ] @@ -921,7 +921,7 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.5.0" +version = "1.5.1" dependencies = [ "base64 0.13.1", "base64-simd", @@ -958,7 +958,7 @@ name = "aws-smithy-types-convert" version = "0.60.14" dependencies = [ "aws-smithy-async 1.2.14", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "chrono", "futures-core", "time", @@ -970,7 +970,7 @@ version = "0.1.11" dependencies = [ "aws-smithy-async 1.2.14", "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "http-body-util", "sync_wrapper", "wstd", @@ -2503,7 +2503,7 @@ dependencies = [ "aws-smithy-json 0.62.7", "aws-smithy-runtime", "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.0", + "aws-smithy-types 1.5.1", "aws-smithy-xml 0.60.15", "bytes", "fastrand 2.4.1", diff --git a/rust-runtime/aws-smithy-types/Cargo.toml b/rust-runtime/aws-smithy-types/Cargo.toml index 35e4e96a568..738b3b9e590 100644 --- a/rust-runtime/aws-smithy-types/Cargo.toml +++ b/rust-runtime/aws-smithy-types/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-types" -version = "1.5.0" +version = "1.5.1" authors = [ "AWS Rust SDK Team ", "Russell Cohen ", @@ -46,7 +46,9 @@ num-integer = "0.1.46" pin-project-lite = "0.2.14" pin-utils = "0.1.0" ryu = "1.0.22" -time = { version = "0.3.4", features = ["parsing"] } +# Upper bound excludes the broken 0.3.48, which has an E0119 coherence regression +# (https://github.com/time-rs/time/issues/783). Relax to "0.3.4" once 0.3.49 ships. +time = { version = ">=0.3.4, <0.3.48", features = ["parsing"] } # ByteStream internals futures-core = { version = "0.3.31", optional = true } diff --git a/rust-runtime/aws-smithy-types/src/timeout.rs b/rust-runtime/aws-smithy-types/src/timeout.rs index 0a5d868c71b..aca3d6c932a 100644 --- a/rust-runtime/aws-smithy-types/src/timeout.rs +++ b/rust-runtime/aws-smithy-types/src/timeout.rs @@ -46,8 +46,10 @@ impl CanDisable { } } -impl From for CanDisable { - fn from(value: T) -> Self { +// Keep this concrete (not a blanket `impl From`): a blanket impl can clash with +// `From` impls from other crates and break the build (E0119) on a dependency bump. +impl From for CanDisable { + fn from(value: Duration) -> Self { Self::Set(value) } } From d3c82d35ac2966780e96f56d2d79810182fc4537 Mon Sep 17 00:00:00 2001 From: ysaito1001 Date: Fri, 12 Jun 2026 20:46:06 -0500 Subject: [PATCH 8/9] Bump MSRV to 1.94.1 (#4692) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Motivation and Context Upgrade the MSRV to 1.94.1. Per [feedback from a customer](https://github.com/smithy-lang/smithy-rs/issues/4578), this PR bumps minor versions across crates, regardless of whether stable or unstable. ## Description The following is a list of CI failures addressed during the MSRV upgrade: ### Compiler lint fixes - `unused_imports` in `coalesce.rs` / `ite.rs` — Removed `use super::*` from test modules. Rust 1.94 correctly identifies that macros re-exported with pub(crate) use are already in scope without an explicit import. ``` error: unused import: `super` --> sdk/s3/src/endpoint_lib/coalesce.rs:103:9 ``` - `clippy::unnecessary_unwrap` in `aws-smithy-eventstream` — Restructured `acquire()` to use early-return pattern instead of `is_some()/unwrap()`. ``` error: called `unwrap` on `self.signer` after checking its variant with `is_some` --> aws-smithy-eventstream/src/frame.rs:111:13 ``` - `unused_assignments` in generated server protocol tests — Rust 1.94 flags the moved sender in async closures as "value captured is never read" since `send()` only borrows it. Fixed by placing `#[allow(unused_assignments)]` on the closure expression. ``` error: value captured by `sender` is never read --> rest_json/rust-server-codegen/src/operation.rs:45822:37 | 45822 | ... sender.send(()).await.expect("receiver dropped early"); | ^^^^^^ | = help: did you mean to capture by reference instead? ``` - `unused_imports` in `retry.rs` — Removed unused `error` from tracing import. ``` error: unused import: `error` --> smithy-rs-tool-common/src/retry.rs:9:15 ``` - `unused_imports` on Windows — Moved `SystemTime`, `Rfc3339`, and `OffsetDateTime` imports inside cfg-gated test functions so they're only compiled when the test is active. ``` error: unused import: `time::format_description::well_known::Rfc3339` --> aws-smithy-types\src\date_time\mod.rs:396:9 ``` ### Test fixes - `system_time_conversions` / `date_format` / `date_time_format` panics on Windows — Added `target_os = "windows"` to cfg exclusions. The `time` crate's `SystemTime::from(OffsetDateTime)` panics for pre-1601 dates on Windows because `SystemTime` is backed by `FILETIME` (epoch 1601). The test oracle panics while constructing the expected value; our production code handles this correctly via `checked_sub` → `Err`. ``` thread 'date_time::test::system_time_conversions' panicked at std\src\time.rs:712:31: overflow when subtracting duration from instant ``` ### CI/tooling updates - Dockerfile — added `aarch64-unknown-linux-musl` target, bumped `cargo-check-external-types` to 0.5.0. - `ci.yml` / `manual-canary.yml` — Updated hardcoded toolchain from 1.91.1 to 1.94.1 for the aarch64 canary jobs. ``` error[E0463]: can't find crate for core = note: the aarch64-unknown-linux-musl target may not be installed ``` - `pull-request-bot.yml` — Updated `rust_nightly_version` to nightly-2026-03-20. ### Design book doctests - Marked 6 code blocks in `design/src/server/anatomy.md` and `middleware.md` as `rust,ignore`. The shared `target-dir` in `.cargo/config.toml` causes both `http 0.2` and `http 1.x` rlibs to exist in `target/debug/deps/`, making `extern crate http` ambiguous. ``` error[E0464]: multiple candidates for rlib dependency http found --> /tmp/mdbook-J98CBh/server/anatomy.md:677:1 = note: candidate #1: target/debug/deps/libhttp-3d1c53169010d178.rlib = note: candidate #2: target/debug/deps/libhttp-654580366553cb9a.rlib ``` ### Semver/version bumps - `aws-smithy-schema` — Changed from 0.1.0 to 0.1.1. A minor bump on a 0.x crate is semver-incompatible with `^0.1` required by released `aws-config`, causing the semver hazards check to fail. When we ship schema serde, we make `aws-smithy-schema` 1.x, after which we can bump minor for MSRV upgrades. ``` error[E0308]: mismatched types --> aws-config-1.8.18/src/lib.rs:999:34 note: there are multiple different versions of crate aws_smithy_schema in the dependency graph ``` ## Testing - CI ## Checklist - [x] For changes to the smithy-rs codegen or runtime crates, I have created a changelog entry Markdown file in the `.changelog` directory, specifying "client," "server," or both in the `applies_to` key. - [x] For changes to the AWS SDK, generated SDK code, or SDK runtime crates, I have created a changelog entry Markdown file in the `.changelog` directory, specifying "aws-sdk-rust" in the `applies_to` key. ---- _By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._ --- .changelog/msrv-1-94-1.md | 9 + .github/workflows/ci.yml | 6 +- .github/workflows/claim-crate-names.yml | 2 +- .github/workflows/github-pages.yml | 2 +- .github/workflows/manual-canary.yml | 4 +- .github/workflows/pull-request-bot.yml | 2 +- .github/workflows/release.yml | 2 +- aws/rust-runtime/aws-config/Cargo.toml | 4 +- .../aws-credential-types/Cargo.toml | 4 +- aws/rust-runtime/aws-inlineable/Cargo.toml | 2 +- aws/rust-runtime/aws-runtime-api/Cargo.toml | 4 +- aws/rust-runtime/aws-runtime/Cargo.toml | 4 +- aws/rust-runtime/aws-sigv4/Cargo.toml | 4 +- aws/rust-runtime/aws-sigv4/src/date_time.rs | 4 +- aws/rust-runtime/aws-types/Cargo.toml | 4 +- .../protocol/ServerProtocolTestGenerator.kt | 29 +-- design/src/server/anatomy.md | 10 +- design/src/server/middleware.md | 2 +- examples/pokemon-service/Cargo.toml | 2 +- gradle.properties | 4 +- rust-runtime/Cargo.lock | 178 +++++++++--------- rust-runtime/aws-smithy-async/Cargo.toml | 4 +- rust-runtime/aws-smithy-cbor/Cargo.toml | 4 +- rust-runtime/aws-smithy-checksums/Cargo.toml | 4 +- .../aws-smithy-compression/Cargo.toml | 4 +- rust-runtime/aws-smithy-dns/Cargo.toml | 4 +- .../aws-smithy-eventstream/Cargo.toml | 6 +- .../aws-smithy-eventstream/src/frame.rs | 7 +- .../aws-smithy-experimental/Cargo.toml | 4 +- rust-runtime/aws-smithy-fuzz/Cargo.toml | 4 +- .../aws-smithy-http-client/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../aws-smithy-http-server-metrics/Cargo.toml | 4 +- .../aws-smithy-http-server-python/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../aws-smithy-http-server/Cargo.toml | 4 +- rust-runtime/aws-smithy-http/Cargo.toml | 4 +- rust-runtime/aws-smithy-json/Cargo.toml | 4 +- .../aws-smithy-legacy-http-server/Cargo.toml | 4 +- .../aws-smithy-legacy-http/Cargo.toml | 4 +- rust-runtime/aws-smithy-mocks/Cargo.toml | 4 +- .../aws-smithy-observability-otel/Cargo.toml | 4 +- .../aws-smithy-observability/Cargo.toml | 4 +- .../aws-smithy-protocol-test/Cargo.toml | 4 +- rust-runtime/aws-smithy-query/Cargo.toml | 4 +- .../aws-smithy-runtime-api-macros/Cargo.toml | 4 +- .../aws-smithy-runtime-api/Cargo.toml | 4 +- rust-runtime/aws-smithy-runtime/Cargo.toml | 4 +- rust-runtime/aws-smithy-schema/Cargo.toml | 6 +- .../aws-smithy-types-convert/Cargo.toml | 4 +- rust-runtime/aws-smithy-types/Cargo.toml | 4 +- .../aws-smithy-types/src/date_time/mod.rs | 8 +- rust-runtime/aws-smithy-wasm/Cargo.toml | 4 +- rust-runtime/aws-smithy-xml/Cargo.toml | 4 +- rust-runtime/inlineable/Cargo.toml | 2 +- .../inlineable/src/endpoint_lib/coalesce.rs | 1 - .../inlineable/src/endpoint_lib/ite.rs | 1 - rust-toolchain.toml | 2 +- tools/ci-build/Dockerfile | 7 +- .../smithy-rs-tool-common/src/retry.rs | 2 +- 60 files changed, 225 insertions(+), 215 deletions(-) create mode 100644 .changelog/msrv-1-94-1.md diff --git a/.changelog/msrv-1-94-1.md b/.changelog/msrv-1-94-1.md new file mode 100644 index 00000000000..88de4b28e7b --- /dev/null +++ b/.changelog/msrv-1-94-1.md @@ -0,0 +1,9 @@ +--- +applies_to: ["client", "server", "aws-sdk-rust"] +authors: ["ysaito1001"] +references: ["smithy-rs#4692"] +breaking: true +new_feature: false +bug_fix: false +--- +Upgrade MSRV to Rust 1.94.1. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 047e1f556e2..bc4a7ad5142 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,7 +33,7 @@ on: required: false env: - rust_version: 1.91.1 + rust_version: 1.94.1 rust_toolchain_components: clippy,rustfmt ENCRYPTED_DOCKER_PASSWORD: ${{ secrets.ENCRYPTED_DOCKER_PASSWORD }} DOCKER_LOGIN_TOKEN_PASSPHRASE: ${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }} @@ -412,8 +412,8 @@ jobs: run: | export RUST_STABLE_VERSION="$(rustc --version | cut -d' ' -f2)" # Install the pinned toolchain from rust-toolchain.toml and add musl target - rustup toolchain install 1.91.1 - rustup target add aarch64-unknown-linux-musl wasm32-wasip2 --toolchain 1.91.1 + rustup toolchain install 1.94.1 + rustup target add aarch64-unknown-linux-musl wasm32-wasip2 --toolchain 1.94.1 ./smithy-rs/tools/ci-scripts/run-canary \ ${{ secrets.CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME }} \ ${{ steps.creds.outputs.aws-access-key-id }} \ diff --git a/.github/workflows/claim-crate-names.yml b/.github/workflows/claim-crate-names.yml index b860a3b02ee..fb539186d38 100644 --- a/.github/workflows/claim-crate-names.yml +++ b/.github/workflows/claim-crate-names.yml @@ -10,7 +10,7 @@ concurrency: cancel-in-progress: true env: - rust_version: 1.91.1 + rust_version: 1.94.1 name: Claim unpublished crate names on crates.io run-name: ${{ github.workflow }} diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml index 1dcfe5920ae..6d380a07485 100644 --- a/.github/workflows/github-pages.yml +++ b/.github/workflows/github-pages.yml @@ -8,7 +8,7 @@ on: name: Update GitHub Pages env: - rust_version: 1.91.1 + rust_version: 1.94.1 # Allow only one doc pages build to run at a time for the entire smithy-rs repo concurrency: diff --git a/.github/workflows/manual-canary.yml b/.github/workflows/manual-canary.yml index 227a3c5eb78..eae48a27a99 100644 --- a/.github/workflows/manual-canary.yml +++ b/.github/workflows/manual-canary.yml @@ -159,8 +159,8 @@ jobs: run: | export RUST_STABLE_VERSION="$(rustc --version | cut -d' ' -f2)" # Install the pinned toolchain from rust-toolchain.toml and add musl target - rustup toolchain install 1.91.1 - rustup target add aarch64-unknown-linux-musl wasm32-wasip2 --toolchain 1.91.1 + rustup toolchain install 1.94.1 + rustup target add aarch64-unknown-linux-musl wasm32-wasip2 --toolchain 1.94.1 ./smithy-rs/tools/ci-scripts/run-canary \ ${{ secrets.CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME }} \ ${{ steps.creds.outputs.aws-access-key-id }} \ diff --git a/.github/workflows/pull-request-bot.yml b/.github/workflows/pull-request-bot.yml index 85f3d1ac1bc..5b904e65d17 100644 --- a/.github/workflows/pull-request-bot.yml +++ b/.github/workflows/pull-request-bot.yml @@ -35,7 +35,7 @@ env: apt_dependencies: libssl-dev gnuplot jq java_version: 17 rust_toolchain_components: clippy,rustfmt - rust_nightly_version: nightly-2025-10-18 + rust_nightly_version: nightly-2026-03-20 ENCRYPTED_DOCKER_PASSWORD: ${{ secrets.ENCRYPTED_DOCKER_PASSWORD }} DOCKER_LOGIN_TOKEN_PASSPHRASE: ${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5b950bdb094..5b7bd6223bd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,7 +10,7 @@ concurrency: cancel-in-progress: true env: - rust_version: 1.91.1 + rust_version: 1.94.1 name: Release smithy-rs on: diff --git a/aws/rust-runtime/aws-config/Cargo.toml b/aws/rust-runtime/aws-config/Cargo.toml index a90c4b2c43d..0d93f793ff5 100644 --- a/aws/rust-runtime/aws-config/Cargo.toml +++ b/aws/rust-runtime/aws-config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-config" -version = "1.8.18" +version = "1.9.0" authors = [ "AWS Rust SDK Team ", "Russell Cohen ", @@ -10,7 +10,7 @@ edition = "2021" exclude = ["test-data/*", "integration-tests/*"] license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] behavior-version-latest = [] diff --git a/aws/rust-runtime/aws-credential-types/Cargo.toml b/aws/rust-runtime/aws-credential-types/Cargo.toml index bfbbadef5a4..63bf5d797a4 100644 --- a/aws/rust-runtime/aws-credential-types/Cargo.toml +++ b/aws/rust-runtime/aws-credential-types/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-credential-types" -version = "1.2.14" +version = "1.3.0" authors = ["AWS Rust SDK Team "] description = "Types for AWS SDK credentials." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] hardcoded-credentials = [] diff --git a/aws/rust-runtime/aws-inlineable/Cargo.toml b/aws/rust-runtime/aws-inlineable/Cargo.toml index d0da011bc92..5984b97bd7c 100644 --- a/aws/rust-runtime/aws-inlineable/Cargo.toml +++ b/aws/rust-runtime/aws-inlineable/Cargo.toml @@ -10,7 +10,7 @@ edition = "2021" license = "Apache-2.0" publish = false repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] http-1x = ["aws-smithy-runtime-api/http-1x"] diff --git a/aws/rust-runtime/aws-runtime-api/Cargo.toml b/aws/rust-runtime/aws-runtime-api/Cargo.toml index 728a716a2f4..f80b31b5714 100644 --- a/aws/rust-runtime/aws-runtime-api/Cargo.toml +++ b/aws/rust-runtime/aws-runtime-api/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-runtime-api" -version = "1.1.12" +version = "1.2.0" authors = ["AWS Rust SDK Team "] description = "Runtime support code for the AWS SDK. This isn't intended to be used directly." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] diff --git a/aws/rust-runtime/aws-runtime/Cargo.toml b/aws/rust-runtime/aws-runtime/Cargo.toml index 6227867d7ed..3ea250fa23c 100644 --- a/aws/rust-runtime/aws-runtime/Cargo.toml +++ b/aws/rust-runtime/aws-runtime/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-runtime" -version = "1.7.5" +version = "1.8.0" authors = ["AWS Rust SDK Team "] description = "Runtime support code for the AWS SDK. This crate isn't intended to be used directly." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] event-stream = ["dep:aws-smithy-eventstream", "aws-sigv4/sign-eventstream"] diff --git a/aws/rust-runtime/aws-sigv4/Cargo.toml b/aws/rust-runtime/aws-sigv4/Cargo.toml index 4f1cd2892ec..5387a8b1168 100644 --- a/aws/rust-runtime/aws-sigv4/Cargo.toml +++ b/aws/rust-runtime/aws-sigv4/Cargo.toml @@ -1,13 +1,13 @@ [package] name = "aws-sigv4" -version = "1.4.5" +version = "1.5.0" authors = ["AWS Rust SDK Team ", "David Barsky "] description = "SigV4 signer for HTTP requests and Event Stream messages." edition = "2021" exclude = ["aws-sig-v4-test-suite/*"] license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] default = ["sign-http", "http1"] diff --git a/aws/rust-runtime/aws-sigv4/src/date_time.rs b/aws/rust-runtime/aws-sigv4/src/date_time.rs index f27a265e0e8..955b84ab871 100644 --- a/aws/rust-runtime/aws-sigv4/src/date_time.rs +++ b/aws/rust-runtime/aws-sigv4/src/date_time.rs @@ -96,7 +96,7 @@ mod tests { use time::format_description::well_known::Rfc3339; // TODO(https://github.com/smithy-lang/smithy-rs/issues/1857) - #[cfg(not(any(target_arch = "powerpc", target_arch = "x86")))] + #[cfg(not(any(target_arch = "powerpc", target_arch = "x86", target_os = "windows")))] #[test] fn date_format() { let time: SystemTime = OffsetDateTime::parse("2039-02-04T23:01:09.104Z", &Rfc3339) @@ -110,7 +110,7 @@ mod tests { } // TODO(https://github.com/smithy-lang/smithy-rs/issues/1857) - #[cfg(not(any(target_arch = "powerpc", target_arch = "x86")))] + #[cfg(not(any(target_arch = "powerpc", target_arch = "x86", target_os = "windows")))] #[test] fn date_time_format() { let time: SystemTime = OffsetDateTime::parse("2039-02-04T23:01:09.104Z", &Rfc3339) diff --git a/aws/rust-runtime/aws-types/Cargo.toml b/aws/rust-runtime/aws-types/Cargo.toml index 744fb7dacba..e8de478e402 100644 --- a/aws/rust-runtime/aws-types/Cargo.toml +++ b/aws/rust-runtime/aws-types/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-types" -version = "1.3.16" +version = "1.4.0" authors = ["AWS Rust SDK Team ", "Russell Cohen "] description = "Cross-service types for the AWS SDK." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] # This feature is to be used only for doc comments diff --git a/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocolTestGenerator.kt b/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocolTestGenerator.kt index 1c9c6e8425d..a824afcbbe7 100644 --- a/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocolTestGenerator.kt +++ b/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocolTestGenerator.kt @@ -478,9 +478,9 @@ class ServerProtocolTestGenerator( val sanitizedBody = escape(body.replace("\u000c", "\\u{000c}")).dq() val encodedBodyTemplate = """ - #{Bytes}::copy_from_slice( - &#{decode_body_data}($sanitizedBody.as_bytes(), #{MediaType}::from(${(bodyMediaType ?: "unknown").dq()})) - ) + #{Bytes}::copy_from_slice( + &#{decode_body_data}($sanitizedBody.as_bytes(), #{MediaType}::from(${(bodyMediaType ?: "unknown").dq()})) + ) """ requestBodyConstructor(encodedBodyTemplate, needsSync) @@ -490,8 +490,8 @@ class ServerProtocolTestGenerator( rustTemplate( """ - .body(#{BodyCode}).unwrap(); - """, + .body(#{BodyCode}).unwrap(); + """, *codegenScope, "BodyCode" to bodyCode, ) @@ -605,14 +605,19 @@ class ServerProtocolTestGenerator( let (sender, mut receiver) = #{Tokio}::sync::mpsc::channel(1); let config = crate::service::${serviceName}Config::builder().build(); let service = crate::service::$serviceName::builder::<#{BodyType}, _, _, _>(config) - .$operationName(move |input: $inputT| { - let sender = sender.clone(); - async move { - let result = { #{Body:W} }; - sender.send(()).await.expect("receiver dropped early"); - result + .$operationName( + // Rust 1.94+ flags the moved `sender` as "value captured is never read" + // since `send()` only borrows it. + ##[allow(unused_assignments)] + move |input: $inputT| { + let sender = sender.clone(); + async move { + let result = { #{Body:W} }; + sender.send(()).await.expect("receiver dropped early"); + result + } } - }) + ) .build_unchecked(); let http_response = #{Tower}::ServiceExt::oneshot(service, http_request) .await diff --git a/design/src/server/anatomy.md b/design/src/server/anatomy.md index 47ace208270..91e7ec851e4 100644 --- a/design/src/server/anatomy.md +++ b/design/src/server/anatomy.md @@ -187,7 +187,7 @@ let operation = GetPokemonSpecies::from_handler(get_pokemon_service); Alternatively, `from_service` constructor: -```rust +```rust,ignore # extern crate pokemon_service_server_sdk; # extern crate aws_smithy_http_server; # extern crate tower; @@ -230,7 +230,7 @@ To summarize a _model service_ constructed can be constructed from a `Handler` o A [Smithy protocol](https://awslabs.github.io/smithy/2.0/spec/protocol-traits.html#serialization-and-protocol-traits) specifies the serialization/deserialization scheme - how a HTTP request is transformed into a modelled input and a modelled output to a HTTP response. The is formalized using the [`FromRequest`](https://docs.rs/aws-smithy-http-server/latest/aws_smithy_http_server/request/trait.FromRequest.html) and [`IntoResponse`](https://github.com/smithy-lang/smithy-rs/blob/4c5cbc39384f0d949d7693eb87b5853fe72629cd/rust-runtime/aws-smithy-http-server/src/response.rs#L40-L44) traits: -```rust +```rust,ignore # extern crate aws_smithy_http_server; # extern crate http; # use aws_smithy_http_server::body::BoxBody; @@ -357,7 +357,7 @@ Different protocols supported by Smithy enjoy different routing mechanisms, for Despite their differences, all routing mechanisms satisfy a common interface. This is formalized using the [Router](https://docs.rs/aws-smithy-http-server/latest/aws_smithy_http_server/routing/trait.Router.html) trait: -```rust +```rust,ignore # extern crate aws_smithy_http_server; # extern crate http; /// An interface for retrieving an inner [`Service`] given a [`http::Request`]. @@ -673,7 +673,7 @@ stateDiagram-v2 An additional omitted detail is that we provide an "escape hatch" allowing `Handler`s and `OperationService`s to accept data that isn't modelled. In addition to accepting `Op::Input` they can accept additional arguments which implement the [`FromParts`](https://docs.rs/aws-smithy-http-server/latest/aws_smithy_http_server/request/trait.FromParts.html) trait: -```rust +```rust,ignore # extern crate aws_smithy_http_server; # extern crate http; # use http::request::Parts; @@ -709,7 +709,7 @@ pub struct Parts { This is commonly used to access types stored within [`Extensions`](https://docs.rs/http/0.2.8/http/struct.Extensions.html) which have been inserted by a middleware. An `Extension` struct implements `FromParts` to support this use case: -```rust +```rust,ignore # extern crate aws_smithy_http_server; # extern crate http; # extern crate thiserror; diff --git a/design/src/server/middleware.md b/design/src/server/middleware.md index 2bac52c9e67..9de9486d1e0 100644 --- a/design/src/server/middleware.md +++ b/design/src/server/middleware.md @@ -49,7 +49,7 @@ The `Service` trait can be thought of as an asynchronous function from a request Middleware in `tower` typically conforms to the following pattern, a `Service` implementation of the form -```rust +```rust,ignore pub struct NewService { inner: S, /* auxillary data */ diff --git a/examples/pokemon-service/Cargo.toml b/examples/pokemon-service/Cargo.toml index 8f0ce8d6d93..e99d4d334c4 100644 --- a/examples/pokemon-service/Cargo.toml +++ b/examples/pokemon-service/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" publish = false authors = ["Smithy-rs Server Team "] description = "A smithy Rust service to retrieve information about Pokémon." -rust-version = "1.88" +rust-version = "1.94.1" [dependencies] clap = { version = "4", features = ["derive"] } diff --git a/gradle.properties b/gradle.properties index 0f3c3f6109f..c9cd1341354 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ # SPDX-License-Identifier: Apache-2.0 # # Rust MSRV (entered into the generated README) -rust.msrv=1.91.1 +rust.msrv=1.94.1 # To enable debug, swap out the two lines below. # When changing this value, be sure to run `./gradlew --stop` to kill the Gradle daemon. # org.gradle.jvmargs=-Xmx1024M -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=localhost:5006 @@ -17,4 +17,4 @@ allowLocalDeps=false # Avoid registering dependencies/plugins/tasks that are only used for testing purposes isTestingEnabled=true # codegen publication version -codegenVersion=0.1.19 +codegenVersion=0.1.20 diff --git a/rust-runtime/Cargo.lock b/rust-runtime/Cargo.lock index dd2b2f89546..1b2800b4d06 100644 --- a/rust-runtime/Cargo.lock +++ b/rust-runtime/Cargo.lock @@ -349,7 +349,7 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "1.2.14" +version = "1.3.0" dependencies = [ "futures-util", "pin-project-lite", @@ -370,11 +370,11 @@ dependencies = [ [[package]] name = "aws-smithy-cbor" -version = "0.61.10" +version = "0.62.0" dependencies = [ - "aws-smithy-runtime-api 1.12.3", + "aws-smithy-runtime-api 1.13.0", "aws-smithy-schema", - "aws-smithy-types 1.5.1", + "aws-smithy-types 1.6.0", "criterion", "minicbor 2.2.2", "num-bigint", @@ -382,10 +382,10 @@ dependencies = [ [[package]] name = "aws-smithy-checksums" -version = "0.64.8" +version = "0.65.0" dependencies = [ - "aws-smithy-http 0.63.6", - "aws-smithy-types 1.5.1", + "aws-smithy-http 0.64.0", + "aws-smithy-types 1.6.0", "bytes", "bytes-utils", "crc-fast", @@ -405,10 +405,10 @@ dependencies = [ [[package]] name = "aws-smithy-compression" -version = "0.1.6" +version = "0.2.0" dependencies = [ - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.1", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", "bytes", "bytes-utils", "flate2", @@ -424,9 +424,9 @@ dependencies = [ [[package]] name = "aws-smithy-dns" -version = "0.1.12" +version = "0.2.0" dependencies = [ - "aws-smithy-runtime-api 1.12.3", + "aws-smithy-runtime-api 1.13.0", "criterion", "hickory-resolver", "tokio", @@ -434,10 +434,10 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.21" +version = "0.61.1" dependencies = [ "arbitrary", - "aws-smithy-types 1.5.1", + "aws-smithy-types 1.6.0", "bytes", "bytes-utils", "crc32fast", @@ -449,7 +449,7 @@ dependencies = [ [[package]] name = "aws-smithy-experimental" -version = "0.2.4" +version = "0.3.0" [[package]] name = "aws-smithy-http" @@ -474,12 +474,12 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.63.6" +version = "0.64.0" dependencies = [ "async-stream", "aws-smithy-eventstream", - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.1", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", "bytes", "bytes-utils", "futures-core", @@ -498,12 +498,12 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.1.13" +version = "1.2.0" dependencies = [ - "aws-smithy-async 1.2.14", + "aws-smithy-async 1.3.0", "aws-smithy-protocol-test", - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.1", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", "base64 0.22.1", "bytes", "h2 0.3.27", @@ -569,14 +569,14 @@ dependencies = [ [[package]] name = "aws-smithy-http-server" -version = "0.66.5" -dependencies = [ - "aws-smithy-cbor 0.61.10", - "aws-smithy-http 0.63.6", - "aws-smithy-json 0.62.7", - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.1", - "aws-smithy-xml 0.60.15", +version = "0.67.0" +dependencies = [ + "aws-smithy-cbor 0.62.0", + "aws-smithy-http 0.64.0", + "aws-smithy-json 0.63.0", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", + "aws-smithy-xml 0.61.1", "bytes", "futures-util", "http 1.4.2", @@ -602,10 +602,10 @@ dependencies = [ [[package]] name = "aws-smithy-http-server-metrics" -version = "0.1.2" +version = "0.2.0" dependencies = [ "aws-smithy-http-server 0.65.10", - "aws-smithy-http-server 0.66.5", + "aws-smithy-http-server 0.67.0", "aws-smithy-http-server-metrics-macro", "aws-smithy-legacy-http-server", "futures", @@ -628,7 +628,7 @@ dependencies = [ [[package]] name = "aws-smithy-http-server-metrics-macro" -version = "0.1.1" +version = "0.2.0" dependencies = [ "proc-macro2", "quote", @@ -637,13 +637,13 @@ dependencies = [ [[package]] name = "aws-smithy-http-server-python" -version = "0.67.1" +version = "0.68.0" dependencies = [ - "aws-smithy-http 0.63.6", - "aws-smithy-json 0.62.7", + "aws-smithy-http 0.64.0", + "aws-smithy-json 0.63.0", "aws-smithy-legacy-http-server", - "aws-smithy-types 1.5.1", - "aws-smithy-xml 0.60.15", + "aws-smithy-types 1.6.0", + "aws-smithy-xml 0.61.1", "bytes", "futures", "futures-util", @@ -685,24 +685,24 @@ dependencies = [ [[package]] name = "aws-smithy-json" -version = "0.62.7" +version = "0.63.0" dependencies = [ - "aws-smithy-runtime-api 1.12.3", + "aws-smithy-runtime-api 1.13.0", "aws-smithy-schema", - "aws-smithy-types 1.5.1", + "aws-smithy-types 1.6.0", "proptest", "serde_json", ] [[package]] name = "aws-smithy-legacy-http" -version = "0.62.15" +version = "0.63.0" dependencies = [ "async-stream", "aws-smithy-eventstream", - "aws-smithy-http 0.63.6", - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.1", + "aws-smithy-http 0.64.0", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", "bytes", "bytes-utils", "futures-core", @@ -721,14 +721,14 @@ dependencies = [ [[package]] name = "aws-smithy-legacy-http-server" -version = "0.65.15" +version = "0.66.0" dependencies = [ - "aws-smithy-cbor 0.61.10", - "aws-smithy-json 0.62.7", + "aws-smithy-cbor 0.62.0", + "aws-smithy-json 0.63.0", "aws-smithy-legacy-http", - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.1", - "aws-smithy-xml 0.60.15", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", + "aws-smithy-xml 0.61.1", "bytes", "futures-util", "http 0.2.12", @@ -751,28 +751,28 @@ dependencies = [ [[package]] name = "aws-smithy-mocks" -version = "0.2.6" +version = "0.3.0" dependencies = [ - "aws-smithy-async 1.2.14", + "aws-smithy-async 1.3.0", "aws-smithy-http-client", "aws-smithy-runtime", - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.1", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", "http 1.4.2", "tokio", ] [[package]] name = "aws-smithy-observability" -version = "0.2.6" +version = "0.3.0" dependencies = [ - "aws-smithy-runtime-api 1.12.3", + "aws-smithy-runtime-api 1.13.0", "serial_test", ] [[package]] name = "aws-smithy-observability-otel" -version = "0.1.11" +version = "0.2.0" dependencies = [ "async-global-executor", "async-task", @@ -787,10 +787,10 @@ dependencies = [ [[package]] name = "aws-smithy-protocol-test" -version = "0.63.14" +version = "0.64.0" dependencies = [ "assert-json-diff", - "aws-smithy-runtime-api 1.12.3", + "aws-smithy-runtime-api 1.13.0", "base64-simd", "cbor-diag", "ciborium", @@ -805,24 +805,24 @@ dependencies = [ [[package]] name = "aws-smithy-query" -version = "0.60.15" +version = "0.61.1" dependencies = [ - "aws-smithy-types 1.5.1", + "aws-smithy-types 1.6.0", "urlencoding", ] [[package]] name = "aws-smithy-runtime" -version = "1.11.3" +version = "1.12.0" dependencies = [ "approx", - "aws-smithy-async 1.2.14", - "aws-smithy-http 0.63.6", + "aws-smithy-async 1.3.0", + "aws-smithy-http 0.64.0", "aws-smithy-http-client", "aws-smithy-observability", - "aws-smithy-runtime-api 1.12.3", + "aws-smithy-runtime-api 1.13.0", "aws-smithy-schema", - "aws-smithy-types 1.5.1", + "aws-smithy-types 1.6.0", "bytes", "fastrand 2.4.1", "futures-util", @@ -859,11 +859,11 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.12.3" +version = "1.13.0" dependencies = [ - "aws-smithy-async 1.2.14", + "aws-smithy-async 1.3.0", "aws-smithy-runtime-api-macros", - "aws-smithy-types 1.5.1", + "aws-smithy-types 1.6.0", "bytes", "http 0.2.12", "http 1.4.2", @@ -876,7 +876,7 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api-macros" -version = "1.0.0" +version = "1.1.0" dependencies = [ "proc-macro2", "quote", @@ -885,10 +885,10 @@ dependencies = [ [[package]] name = "aws-smithy-schema" -version = "0.1.0" +version = "0.1.1" dependencies = [ - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.1", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", "http 1.4.2", ] @@ -921,7 +921,7 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.5.1" +version = "1.6.0" dependencies = [ "base64 0.13.1", "base64-simd", @@ -955,10 +955,10 @@ dependencies = [ [[package]] name = "aws-smithy-types-convert" -version = "0.60.14" +version = "0.61.1" dependencies = [ - "aws-smithy-async 1.2.14", - "aws-smithy-types 1.5.1", + "aws-smithy-async 1.3.0", + "aws-smithy-types 1.6.0", "chrono", "futures-core", "time", @@ -966,11 +966,11 @@ dependencies = [ [[package]] name = "aws-smithy-wasm" -version = "0.1.11" +version = "0.2.0" dependencies = [ - "aws-smithy-async 1.2.14", - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.1", + "aws-smithy-async 1.3.0", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", "http-body-util", "sync_wrapper", "wstd", @@ -987,7 +987,7 @@ dependencies = [ [[package]] name = "aws-smithy-xml" -version = "0.60.15" +version = "0.61.1" dependencies = [ "aws-smithy-protocol-test", "base64 0.13.1", @@ -2497,14 +2497,14 @@ dependencies = [ name = "inlineable" version = "0.1.0" dependencies = [ - "aws-smithy-cbor 0.61.10", + "aws-smithy-cbor 0.62.0", "aws-smithy-compression", - "aws-smithy-http 0.63.6", - "aws-smithy-json 0.62.7", + "aws-smithy-http 0.64.0", + "aws-smithy-json 0.63.0", "aws-smithy-runtime", - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.5.1", - "aws-smithy-xml 0.60.15", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", + "aws-smithy-xml 0.61.1", "bytes", "fastrand 2.4.1", "futures-util", diff --git a/rust-runtime/aws-smithy-async/Cargo.toml b/rust-runtime/aws-smithy-async/Cargo.toml index d737dbb1ed9..54f80be2695 100644 --- a/rust-runtime/aws-smithy-async/Cargo.toml +++ b/rust-runtime/aws-smithy-async/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-async" -version = "1.2.14" +version = "1.3.0" authors = ["AWS Rust SDK Team ", "John DiSanti "] description = "Async runtime agnostic abstractions for smithy-rs." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] rt-tokio = ["tokio/time"] diff --git a/rust-runtime/aws-smithy-cbor/Cargo.toml b/rust-runtime/aws-smithy-cbor/Cargo.toml index 2cc957f7761..7349497d392 100644 --- a/rust-runtime/aws-smithy-cbor/Cargo.toml +++ b/rust-runtime/aws-smithy-cbor/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-cbor" -version = "0.61.10" +version = "0.62.0" authors = [ "AWS Rust SDK Team ", "David Pérez ", @@ -9,7 +9,7 @@ description = "CBOR utilities for smithy-rs." edition = "2021" license = "Apache-2.0" repository = "https://github.com/awslabs/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies.minicbor] version = "2.2.1" diff --git a/rust-runtime/aws-smithy-checksums/Cargo.toml b/rust-runtime/aws-smithy-checksums/Cargo.toml index 103a8cbf2b5..60de6d1fb0c 100644 --- a/rust-runtime/aws-smithy-checksums/Cargo.toml +++ b/rust-runtime/aws-smithy-checksums/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-checksums" -version = "0.64.8" +version = "0.65.0" authors = [ "AWS Rust SDK Team ", "Zelda Hessler ", @@ -9,7 +9,7 @@ description = "Checksum calculation and verification callbacks" edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust-runtime/aws-smithy-compression/Cargo.toml b/rust-runtime/aws-smithy-compression/Cargo.toml index e34b8f930b0..c2aa9adf56f 100644 --- a/rust-runtime/aws-smithy-compression/Cargo.toml +++ b/rust-runtime/aws-smithy-compression/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-compression" -version = "0.1.6" +version = "0.2.0" authors = [ "AWS Rust SDK Team ", "Zelda Hessler ", @@ -9,7 +9,7 @@ description = "Request compression for smithy clients." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust-runtime/aws-smithy-dns/Cargo.toml b/rust-runtime/aws-smithy-dns/Cargo.toml index 1bb88aac08a..8a77b76523a 100644 --- a/rust-runtime/aws-smithy-dns/Cargo.toml +++ b/rust-runtime/aws-smithy-dns/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-dns" -version = "0.1.12" +version = "0.2.0" authors = [ "AWS Rust SDK Team ", ] @@ -8,7 +8,7 @@ description = "DNS resolvers for smithy-rs" edition = "2021" license = "Apache-2.0" repository = "https://github.com/awslabs/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] diff --git a/rust-runtime/aws-smithy-eventstream/Cargo.toml b/rust-runtime/aws-smithy-eventstream/Cargo.toml index 29894d3b395..2d0f0107be1 100644 --- a/rust-runtime/aws-smithy-eventstream/Cargo.toml +++ b/rust-runtime/aws-smithy-eventstream/Cargo.toml @@ -1,14 +1,12 @@ [package] name = "aws-smithy-eventstream" -# Only patch releases can be made to this runtime crate until 0.60.21 is published on crates.io -version = "0.60.21" -# +version = "0.61.1" authors = ["AWS Rust SDK Team ", "John DiSanti "] description = "Event stream logic for smithy-rs." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] derive-arbitrary = ["dep:arbitrary", "dep:derive_arbitrary", "arbitrary?/derive"] diff --git a/rust-runtime/aws-smithy-eventstream/src/frame.rs b/rust-runtime/aws-smithy-eventstream/src/frame.rs index 514c5c58b98..b084acd3282 100644 --- a/rust-runtime/aws-smithy-eventstream/src/frame.rs +++ b/rust-runtime/aws-smithy-eventstream/src/frame.rs @@ -69,10 +69,7 @@ impl DeferredSigner { } fn acquire(&mut self) -> &mut (dyn SignMessage + Send + Sync) { - // Can't use `if let Some(signer) = &mut self.signer` because the borrow checker isn't smart enough - if self.signer.is_some() { - self.signer.as_mut().unwrap().as_mut() - } else { + if self.signer.is_none() { self.signer = Some( self.rx .take() @@ -82,8 +79,8 @@ impl DeferredSigner { // event streams or tests that don't configure signing). .unwrap_or_else(|_| Box::new(NoOpSigner {}) as _), ); - self.acquire() } + self.signer.as_mut().unwrap().as_mut() } } diff --git a/rust-runtime/aws-smithy-experimental/Cargo.toml b/rust-runtime/aws-smithy-experimental/Cargo.toml index 09e73e38285..48e15b1f435 100644 --- a/rust-runtime/aws-smithy-experimental/Cargo.toml +++ b/rust-runtime/aws-smithy-experimental/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-experimental" -version = "0.2.4" +version = "0.3.0" authors = ["AWS Rust SDK Team "] description = "Experiments for the smithy-rs ecosystem" edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] crypto-ring = [] diff --git a/rust-runtime/aws-smithy-fuzz/Cargo.toml b/rust-runtime/aws-smithy-fuzz/Cargo.toml index aaf9e7c10d8..18797938080 100644 --- a/rust-runtime/aws-smithy-fuzz/Cargo.toml +++ b/rust-runtime/aws-smithy-fuzz/Cargo.toml @@ -1,13 +1,13 @@ [workspace] [package] name = "aws-smithy-fuzz" -version = "0.1.3" +version = "0.2.0" authors = ["AWS Rust SDK Team "] description = "Fuzzing utilities for smithy-rs servers" edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] afl = "0.15.10" diff --git a/rust-runtime/aws-smithy-http-client/Cargo.toml b/rust-runtime/aws-smithy-http-client/Cargo.toml index bbbb87fef10..24893f90f30 100644 --- a/rust-runtime/aws-smithy-http-client/Cargo.toml +++ b/rust-runtime/aws-smithy-http-client/Cargo.toml @@ -2,11 +2,11 @@ name = "aws-smithy-http-client" authors = ["AWS Rust SDK Team "] description = "HTTP client abstractions for generated smithy clients" -version = "1.1.13" +version = "1.2.0" license = "Apache-2.0" edition = "2021" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] hyper-014 = [ diff --git a/rust-runtime/aws-smithy-http-server-metrics-macro/Cargo.toml b/rust-runtime/aws-smithy-http-server-metrics-macro/Cargo.toml index 60a15ccc30b..7e544c29fd3 100644 --- a/rust-runtime/aws-smithy-http-server-metrics-macro/Cargo.toml +++ b/rust-runtime/aws-smithy-http-server-metrics-macro/Cargo.toml @@ -3,7 +3,7 @@ proc-macro = true [package] name = "aws-smithy-http-server-metrics-macro" -version = "0.1.1" +version = "0.2.0" authors = [ "AWS Rust SDK Team ", "Jason Gin ", @@ -12,7 +12,7 @@ description = "Server metrics via metrique integration." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] syn = { version = "2.0.114", features = ["full"] } diff --git a/rust-runtime/aws-smithy-http-server-metrics/Cargo.toml b/rust-runtime/aws-smithy-http-server-metrics/Cargo.toml index 82d4e2998b0..9dff8baff6c 100644 --- a/rust-runtime/aws-smithy-http-server-metrics/Cargo.toml +++ b/rust-runtime/aws-smithy-http-server-metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-http-server-metrics" -version = "0.1.2" +version = "0.2.0" authors = [ "AWS Rust SDK Team ", "Jason Gin ", @@ -9,7 +9,7 @@ description = "Server metrics via metrique integration." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] aws-smithy-http-server = { path = "../aws-smithy-http-server", features = [ diff --git a/rust-runtime/aws-smithy-http-server-python/Cargo.toml b/rust-runtime/aws-smithy-http-server-python/Cargo.toml index 56c3dd0b035..7cccadc2211 100644 --- a/rust-runtime/aws-smithy-http-server-python/Cargo.toml +++ b/rust-runtime/aws-smithy-http-server-python/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-http-server-python" -version = "0.67.1" +version = "0.68.0" authors = ["Smithy Rust Server "] edition = "2021" license = "Apache-2.0" @@ -11,7 +11,7 @@ description = """ Python server runtime for Smithy Rust Server Framework. """ publish = true -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] aws-smithy-http = { path = "../aws-smithy-http" } diff --git a/rust-runtime/aws-smithy-http-server-typescript/Cargo.toml b/rust-runtime/aws-smithy-http-server-typescript/Cargo.toml index ad583574c43..a232c8940d5 100644 --- a/rust-runtime/aws-smithy-http-server-typescript/Cargo.toml +++ b/rust-runtime/aws-smithy-http-server-typescript/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-http-server-typescript" -version = "0.1.2" +version = "0.2.0" authors = ["Smithy Rust Server "] edition = "2021" license = "Apache-2.0" @@ -11,7 +11,7 @@ description = """ Typescript server runtime for Smithy Rust Server Framework. """ publish = false -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] diff --git a/rust-runtime/aws-smithy-http-server/Cargo.toml b/rust-runtime/aws-smithy-http-server/Cargo.toml index 31c8fa8ab42..fc96223dbe7 100644 --- a/rust-runtime/aws-smithy-http-server/Cargo.toml +++ b/rust-runtime/aws-smithy-http-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-http-server" -version = "0.66.5" +version = "0.67.0" authors = ["Smithy Rust Server "] edition = "2021" license = "Apache-2.0" @@ -11,7 +11,7 @@ description = """ Server runtime for Smithy Rust Server Framework. """ publish = true -rust-version = "1.91.1" +rust-version = "1.94.1" [features] default = [] diff --git a/rust-runtime/aws-smithy-http/Cargo.toml b/rust-runtime/aws-smithy-http/Cargo.toml index e379810ec58..fc3b0429f9d 100644 --- a/rust-runtime/aws-smithy-http/Cargo.toml +++ b/rust-runtime/aws-smithy-http/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-http" -version = "0.63.6" +version = "0.64.0" authors = [ "AWS Rust SDK Team ", "Russell Cohen ", @@ -9,7 +9,7 @@ description = "Smithy HTTP logic for smithy-rs." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] event-stream = ["aws-smithy-eventstream"] diff --git a/rust-runtime/aws-smithy-json/Cargo.toml b/rust-runtime/aws-smithy-json/Cargo.toml index 3b775d1efce..978bd384282 100644 --- a/rust-runtime/aws-smithy-json/Cargo.toml +++ b/rust-runtime/aws-smithy-json/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-json" -version = "0.62.7" +version = "0.63.0" authors = ["AWS Rust SDK Team ", "John DiSanti "] description = "Token streaming JSON parser for smithy-rs." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] aws-smithy-runtime-api = { path = "../aws-smithy-runtime-api", features = ["client"] } diff --git a/rust-runtime/aws-smithy-legacy-http-server/Cargo.toml b/rust-runtime/aws-smithy-legacy-http-server/Cargo.toml index 10acb4dbcd6..8132b30109f 100644 --- a/rust-runtime/aws-smithy-legacy-http-server/Cargo.toml +++ b/rust-runtime/aws-smithy-legacy-http-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-legacy-http-server" -version = "0.65.15" +version = "0.66.0" authors = ["AWS Rust SDK Team ", "Smithy Rust Server "] edition = "2021" license = "Apache-2.0" @@ -11,7 +11,7 @@ description = """ Legacy server runtime for Smithy Rust Server Framework, providing compatibility for code generated with http 0.x and hyper 0.x dependencies. """ publish = true -rust-version = "1.91.1" +rust-version = "1.94.1" [features] aws-lambda = ["dep:lambda_http"] diff --git a/rust-runtime/aws-smithy-legacy-http/Cargo.toml b/rust-runtime/aws-smithy-legacy-http/Cargo.toml index 1023f7db18d..a793518d428 100644 --- a/rust-runtime/aws-smithy-legacy-http/Cargo.toml +++ b/rust-runtime/aws-smithy-legacy-http/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-legacy-http" -version = "0.62.15" +version = "0.63.0" authors = [ "AWS Rust SDK Team ", "Russell Cohen ", @@ -9,7 +9,7 @@ description = "Smithy HTTP-0x logic for smithy-rs." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] event-stream = ["aws-smithy-eventstream", "aws-smithy-http/event-stream"] diff --git a/rust-runtime/aws-smithy-mocks/Cargo.toml b/rust-runtime/aws-smithy-mocks/Cargo.toml index 32f3d620bf4..a359b5773de 100644 --- a/rust-runtime/aws-smithy-mocks/Cargo.toml +++ b/rust-runtime/aws-smithy-mocks/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-mocks" -version = "0.2.6" +version = "0.3.0" authors = ["AWS Rust SDK Team "] description = "Testing utilities for smithy-rs generated clients" edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] aws-smithy-types = { path = "../aws-smithy-types" } diff --git a/rust-runtime/aws-smithy-observability-otel/Cargo.toml b/rust-runtime/aws-smithy-observability-otel/Cargo.toml index fd037e32d03..a3228b19746 100644 --- a/rust-runtime/aws-smithy-observability-otel/Cargo.toml +++ b/rust-runtime/aws-smithy-observability-otel/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-observability-otel" -version = "0.1.11" +version = "0.2.0" authors = [ "AWS Rust SDK Team ", ] @@ -8,7 +8,7 @@ description = "Smithy OpenTelemetry observability implementation." edition = "2021" license = "Apache-2.0" repository = "https://github.com/awslabs/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] aws-smithy-observability = { path = "../aws-smithy-observability" } diff --git a/rust-runtime/aws-smithy-observability/Cargo.toml b/rust-runtime/aws-smithy-observability/Cargo.toml index 6654ba1a6e1..12ef4a7ba2d 100644 --- a/rust-runtime/aws-smithy-observability/Cargo.toml +++ b/rust-runtime/aws-smithy-observability/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-observability" -version = "0.2.6" +version = "0.3.0" authors = [ "AWS Rust SDK Team ", ] @@ -8,7 +8,7 @@ description = "Smithy observability implementation." edition = "2021" license = "Apache-2.0" repository = "https://github.com/awslabs/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] aws-smithy-runtime-api = { path = "../aws-smithy-runtime-api" } diff --git a/rust-runtime/aws-smithy-protocol-test/Cargo.toml b/rust-runtime/aws-smithy-protocol-test/Cargo.toml index 67823ec7762..db0185296c5 100644 --- a/rust-runtime/aws-smithy-protocol-test/Cargo.toml +++ b/rust-runtime/aws-smithy-protocol-test/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-protocol-test" -version = "0.63.14" +version = "0.64.0" authors = ["AWS Rust SDK Team ", "Russell Cohen "] description = "A collection of library functions to validate HTTP requests against Smithy protocol tests." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] default = ["http-02x"] diff --git a/rust-runtime/aws-smithy-query/Cargo.toml b/rust-runtime/aws-smithy-query/Cargo.toml index 284eed0ea3d..2e976f29cb4 100644 --- a/rust-runtime/aws-smithy-query/Cargo.toml +++ b/rust-runtime/aws-smithy-query/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-query" -version = "0.60.15" +version = "0.61.1" authors = ["AWS Rust SDK Team ", "John DiSanti "] description = "AWSQuery and EC2Query Smithy protocol logic for smithy-rs." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] aws-smithy-types = { path = "../aws-smithy-types", features = ["http-body-1-x"] } diff --git a/rust-runtime/aws-smithy-runtime-api-macros/Cargo.toml b/rust-runtime/aws-smithy-runtime-api-macros/Cargo.toml index ecbb806ae04..a82ad021979 100644 --- a/rust-runtime/aws-smithy-runtime-api-macros/Cargo.toml +++ b/rust-runtime/aws-smithy-runtime-api-macros/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-runtime-api-macros" -version = "1.0.0" +version = "1.1.0" authors = ["AWS Rust SDK Team "] description = "Proc macros for aws-smithy-runtime-api." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.0" +rust-version = "1.94.1" [lib] proc-macro = true diff --git a/rust-runtime/aws-smithy-runtime-api/Cargo.toml b/rust-runtime/aws-smithy-runtime-api/Cargo.toml index c1e260c55fa..219a096f926 100644 --- a/rust-runtime/aws-smithy-runtime-api/Cargo.toml +++ b/rust-runtime/aws-smithy-runtime-api/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-runtime-api" -version = "1.12.3" +version = "1.13.0" authors = ["AWS Rust SDK Team ", "Zelda Hessler "] description = "Smithy runtime types." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust-runtime/aws-smithy-runtime/Cargo.toml b/rust-runtime/aws-smithy-runtime/Cargo.toml index f3b21d5f661..1be975def00 100644 --- a/rust-runtime/aws-smithy-runtime/Cargo.toml +++ b/rust-runtime/aws-smithy-runtime/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-runtime" -version = "1.11.3" +version = "1.12.0" authors = ["AWS Rust SDK Team ", "Zelda Hessler "] description = "The new smithy runtime crate" edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust-runtime/aws-smithy-schema/Cargo.toml b/rust-runtime/aws-smithy-schema/Cargo.toml index 5b7f1b15ae0..0dce33648d9 100644 --- a/rust-runtime/aws-smithy-schema/Cargo.toml +++ b/rust-runtime/aws-smithy-schema/Cargo.toml @@ -1,12 +1,14 @@ [package] name = "aws-smithy-schema" -version = "0.1.0" +# Note: bumping minor (0.1 -> 0.2) for an MSRV update causes semver hazards +# because aws-config depends on ^0.1. Use patch bumps until stable is released. +version = "0.1.1" authors = ["AWS Rust SDK Team "] description = "Schema types for the smithy-rs ecosystem" edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91" +rust-version = "1.94.1" [dependencies] aws-smithy-runtime-api = { path = "../aws-smithy-runtime-api", features = ["client"] } diff --git a/rust-runtime/aws-smithy-types-convert/Cargo.toml b/rust-runtime/aws-smithy-types-convert/Cargo.toml index 14a8007567e..251e1f45085 100644 --- a/rust-runtime/aws-smithy-types-convert/Cargo.toml +++ b/rust-runtime/aws-smithy-types-convert/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-types-convert" -version = "0.60.14" +version = "0.61.1" authors = ["AWS Rust SDK Team "] description = "Conversion of types from aws-smithy-types to other libraries." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] convert-chrono = ["aws-smithy-types", "chrono"] diff --git a/rust-runtime/aws-smithy-types/Cargo.toml b/rust-runtime/aws-smithy-types/Cargo.toml index 738b3b9e590..e3be38a733d 100644 --- a/rust-runtime/aws-smithy-types/Cargo.toml +++ b/rust-runtime/aws-smithy-types/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-types" -version = "1.5.1" +version = "1.6.0" authors = [ "AWS Rust SDK Team ", "Russell Cohen ", @@ -9,7 +9,7 @@ description = "Types for smithy-rs codegen." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] byte-stream-poll-next = [] diff --git a/rust-runtime/aws-smithy-types/src/date_time/mod.rs b/rust-runtime/aws-smithy-types/src/date_time/mod.rs index c0db26ff114..c05da3ffdb7 100644 --- a/rust-runtime/aws-smithy-types/src/date_time/mod.rs +++ b/rust-runtime/aws-smithy-types/src/date_time/mod.rs @@ -392,9 +392,6 @@ mod test { use crate::date_time::Format; use crate::DateTime; use proptest::proptest; - use std::time::SystemTime; - use time::format_description::well_known::Rfc3339; - use time::OffsetDateTime; #[test] fn test_display_date_time() { @@ -621,9 +618,12 @@ mod test { } // TODO(https://github.com/smithy-lang/smithy-rs/issues/1857) - #[cfg(not(any(target_arch = "powerpc", target_arch = "x86")))] + #[cfg(not(any(target_arch = "powerpc", target_arch = "x86", target_os = "windows")))] #[test] fn system_time_conversions() { + use std::time::SystemTime; + use time::format_description::well_known::Rfc3339; + use time::OffsetDateTime; // Check agreement let date_time = DateTime::from_str("1000-01-02T01:23:10.123Z", Format::DateTime).unwrap(); let off_date_time = OffsetDateTime::parse("1000-01-02T01:23:10.123Z", &Rfc3339).unwrap(); diff --git a/rust-runtime/aws-smithy-wasm/Cargo.toml b/rust-runtime/aws-smithy-wasm/Cargo.toml index fbed22a1a8f..b3c9f132102 100644 --- a/rust-runtime/aws-smithy-wasm/Cargo.toml +++ b/rust-runtime/aws-smithy-wasm/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-wasm" -version = "0.1.11" +version = "0.2.0" authors = [ "AWS Rust SDK Team ", "Eduardo Rodrigues <16357187+eduardomourar@users.noreply.github.com>", @@ -10,7 +10,7 @@ description = "Smithy WebAssembly wasip2 configuration for smithy-rs." edition = "2021" license = "Apache-2.0" repository = "https://github.com/awslabs/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] aws-smithy-async = { path = "../aws-smithy-async" } diff --git a/rust-runtime/aws-smithy-xml/Cargo.toml b/rust-runtime/aws-smithy-xml/Cargo.toml index 20e72ccb142..661bf0c95f1 100644 --- a/rust-runtime/aws-smithy-xml/Cargo.toml +++ b/rust-runtime/aws-smithy-xml/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-xml" -version = "0.60.15" +version = "0.61.1" authors = ["AWS Rust SDK Team ", "Russell Cohen "] description = "XML parsing logic for Smithy protocols." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] xmlparser = "0.13.5" diff --git a/rust-runtime/inlineable/Cargo.toml b/rust-runtime/inlineable/Cargo.toml index 26815829261..d0a17047c14 100644 --- a/rust-runtime/inlineable/Cargo.toml +++ b/rust-runtime/inlineable/Cargo.toml @@ -10,7 +10,7 @@ are to allow this crate to be compilable and testable in isolation, no client co license = "Apache-2.0" publish = false repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] # this allows the tests to be excluded from downstream crates to keep dependencies / test times reasonable (e.g. no proptests) diff --git a/rust-runtime/inlineable/src/endpoint_lib/coalesce.rs b/rust-runtime/inlineable/src/endpoint_lib/coalesce.rs index 39a74f5f8f0..c597da9ab81 100644 --- a/rust-runtime/inlineable/src/endpoint_lib/coalesce.rs +++ b/rust-runtime/inlineable/src/endpoint_lib/coalesce.rs @@ -99,7 +99,6 @@ pub(crate) use coalesce; #[cfg(test)] mod test { - use super::*; #[test] fn base_cases() { diff --git a/rust-runtime/inlineable/src/endpoint_lib/ite.rs b/rust-runtime/inlineable/src/endpoint_lib/ite.rs index ab430bb9531..5af4f557a01 100644 --- a/rust-runtime/inlineable/src/endpoint_lib/ite.rs +++ b/rust-runtime/inlineable/src/endpoint_lib/ite.rs @@ -101,7 +101,6 @@ pub(crate) use ite; #[cfg(test)] mod test { - use super::*; #[test] fn base_cases() { diff --git a/rust-toolchain.toml b/rust-toolchain.toml index d6d33819778..9cf4a67c474 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.91.1" +channel = "1.94.1" diff --git a/tools/ci-build/Dockerfile b/tools/ci-build/Dockerfile index 0fe66406f8d..c1da37f7d11 100644 --- a/tools/ci-build/Dockerfile +++ b/tools/ci-build/Dockerfile @@ -6,8 +6,8 @@ # This is the base Docker build image used by CI ARG base_image=public.ecr.aws/amazonlinux/amazonlinux:2023 -ARG rust_stable_version=1.91.1 -ARG rust_nightly_version=nightly-2025-10-18 +ARG rust_stable_version=1.94.1 +ARG rust_nightly_version=nightly-2026-03-20 FROM ${base_image} AS bare_base_image RUN yum -y updateinfo && yum clean all && rm -rf /var/cache/yum @@ -84,6 +84,7 @@ RUN yum -y install --allowerasing \ rustup component add clippy; \ rustup toolchain install ${rust_nightly_version} --component clippy; \ rustup target add x86_64-unknown-linux-musl; \ + rustup target add aarch64-unknown-linux-musl; \ rustup target add wasm32-unknown-unknown; \ rustup target add wasm32-wasip1; \ rustup target add wasm32-wasip2; \ @@ -129,7 +130,7 @@ ARG cargo_deny_version=0.16.4 ARG cargo_udeps_version=0.1.56 ARG cargo_hack_version=0.6.27 ARG cargo_minimal_versions_version=0.1.27 -ARG cargo_check_external_types_version=0.4.0 +ARG cargo_check_external_types_version=0.5.0 ARG maturin_version=1.5.1 ARG wasm_pack_version=0.13.1 ARG cargo_wasmtime_version=38.0.4 diff --git a/tools/ci-build/smithy-rs-tool-common/src/retry.rs b/tools/ci-build/smithy-rs-tool-common/src/retry.rs index 9daae8e7796..603e0355035 100644 --- a/tools/ci-build/smithy-rs-tool-common/src/retry.rs +++ b/tools/ci-build/smithy-rs-tool-common/src/retry.rs @@ -6,7 +6,7 @@ use std::error::Error; use std::error::Error as StdError; use std::time::Duration; -use tracing::{error, info}; +use tracing::info; pub type BoxError = Box; From c34377e8c6a74dfeaf9e06fb150d643c4c3c9b51 Mon Sep 17 00:00:00 2001 From: Justin Plock Date: Wed, 3 Jun 2026 22:03:15 +0100 Subject: [PATCH 9/9] Add aws-lc-rs and fips features to aws-sigv4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Route SigV4 HMAC-SHA256 / SHA-256 and (when combined with sigv4a) SigV4a ECDSA-P256 through aws-lc-rs (or aws-lc-fips-sys) when the new features are enabled, mirroring the additive __rustls / rustls-aws-lc / rustls-aws-lc-fips pattern in aws-smithy-http-client and the companion PR #4690 for aws-smithy-checksums. The default build is unchanged and keeps the existing hmac / sha2 / p256 (RustCrypto) path; the new features are strictly opt-in. This is the aws-sigv4 half of smithy-rs#4681. With both halves landed, FIPS-conscious customers can route TLS, request checksums, and request signing end-to-end through aws-lc-rs without forking the runtime crates. An internal __aws-lc-rs feature gates every swapped code path; the public aws-lc-rs and fips features each select the aws-lc-rs backend explicitly (aws-lc-sys vs aws-lc-fips-sys). Source-level cfgs ensure that when __aws-lc-rs is active, no RustCrypto cryptographic code path is executed for SigV4 or SigV4a, even when sigv4a is also enabled. For the SigV4a ECDSA path, the existing 32-byte deterministic scalar contract from generate_signing_key is preserved. calculate_signature wraps the scalar in a minimal 51-byte RFC 5915 SEC1 ECPrivateKey DER (publicKey field intentionally omitted) and hands it to EcdsaKeyPair::from_private_key_der, which lets AWS-LC derive the public point internally — no p256 code path is required. Verified on macOS (aarch64-apple-darwin): - cargo test -p aws-sigv4 (default, RustCrypto) 89 ok - cargo test -p aws-sigv4 --features sigv4a 124 ok - cargo test -p aws-sigv4 --features aws-lc-rs 89 ok - cargo test -p aws-sigv4 --features "aws-lc-rs sigv4a" 124 ok - cargo build -p aws-sigv4 --features "fips sigv4a" ok - cargo clippy -p aws-sigv4 --features "aws-lc-rs sigv4a" --all-targets -- -D warnings clean --- .changelog/aws-sigv4-aws-lc-rs.md | 9 + aws/rust-runtime/Cargo.lock | 175 ++++++++++++++++-- aws/rust-runtime/aws-sigv4/Cargo.toml | 14 +- aws/rust-runtime/aws-sigv4/benches/hmac.rs | 14 ++ .../aws-sigv4/src/http_request/test.rs | 33 +++- aws/rust-runtime/aws-sigv4/src/sign/v4.rs | 39 ++++ aws/rust-runtime/aws-sigv4/src/sign/v4a.rs | 87 ++++++++- 7 files changed, 338 insertions(+), 33 deletions(-) create mode 100644 .changelog/aws-sigv4-aws-lc-rs.md diff --git a/.changelog/aws-sigv4-aws-lc-rs.md b/.changelog/aws-sigv4-aws-lc-rs.md new file mode 100644 index 00000000000..ab6b61e1431 --- /dev/null +++ b/.changelog/aws-sigv4-aws-lc-rs.md @@ -0,0 +1,9 @@ +--- +applies_to: ["client", "aws-sdk-rust"] +authors: ["jplock"] +references: ["smithy-rs#4681"] +breaking: false +new_feature: true +bug_fix: false +--- +Add optional `aws-lc-rs` and `fips` cargo features to `aws-sigv4`. When `aws-lc-rs` is enabled, the SigV4 HMAC-SHA256 / SHA-256 primitives — and, when combined with `sigv4a`, the SigV4a ECDSA-P256 signing path — are routed through `aws-lc-rs` instead of RustCrypto's `hmac` / `sha2` / `p256`. The `fips` feature additionally activates `aws-lc-rs/fips`, routing those primitives through `aws-lc-fips-sys`. The default build is unchanged. diff --git a/aws/rust-runtime/Cargo.lock b/aws/rust-runtime/Cargo.lock index fb1ef471a11..488eadabab3 100644 --- a/aws/rust-runtime/Cargo.lock +++ b/aws/rust-runtime/Cargo.lock @@ -76,7 +76,7 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-credential-types" -version = "1.2.14" +version = "1.3.0" dependencies = [ "async-trait", "aws-smithy-async", @@ -121,9 +121,46 @@ dependencies = [ "url", ] +[[package]] +name = "aws-lc-fips-sys" +version = "0.13.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3d619165468401dec3caa3366ebffbcb83f2f31883e5b3932f8e2dec2ddc568" +dependencies = [ + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", + "regex", +] + +[[package]] +name = "aws-lc-rs" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00" +dependencies = [ + "aws-lc-fips-sys", + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", +] + [[package]] name = "aws-runtime" -version = "1.7.5" +version = "1.8.0" dependencies = [ "arbitrary", "aws-credential-types", @@ -161,13 +198,14 @@ dependencies = [ [[package]] name = "aws-runtime-api" -version = "1.1.12" +version = "1.2.0" [[package]] name = "aws-sigv4" -version = "1.4.5" +version = "1.5.0" dependencies = [ "aws-credential-types", + "aws-lc-rs", "aws-smithy-eventstream", "aws-smithy-http", "aws-smithy-runtime-api", @@ -198,7 +236,7 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "1.2.14" +version = "1.3.0" dependencies = [ "futures-util", "pin-project-lite", @@ -207,7 +245,7 @@ dependencies = [ [[package]] name = "aws-smithy-checksums" -version = "0.64.8" +version = "0.65.0" dependencies = [ "aws-smithy-http", "aws-smithy-types", @@ -226,7 +264,7 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.21" +version = "0.61.1" dependencies = [ "aws-smithy-types", "bytes", @@ -235,7 +273,7 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.63.6" +version = "0.64.0" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", @@ -254,7 +292,7 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.1.13" +version = "1.2.0" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -274,14 +312,14 @@ dependencies = [ [[package]] name = "aws-smithy-observability" -version = "0.2.6" +version = "0.3.0" dependencies = [ "aws-smithy-runtime-api", ] [[package]] name = "aws-smithy-protocol-test" -version = "0.63.14" +version = "0.64.0" dependencies = [ "assert-json-diff", "aws-smithy-runtime-api", @@ -298,7 +336,7 @@ dependencies = [ [[package]] name = "aws-smithy-runtime" -version = "1.11.3" +version = "1.12.0" dependencies = [ "aws-smithy-async", "aws-smithy-http", @@ -322,7 +360,7 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.12.3" +version = "1.13.0" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api-macros", @@ -338,7 +376,7 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api-macros" -version = "1.0.0" +version = "1.1.0" dependencies = [ "proc-macro2", "quote", @@ -347,7 +385,7 @@ dependencies = [ [[package]] name = "aws-smithy-schema" -version = "0.1.0" +version = "0.1.1" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", @@ -356,7 +394,7 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.5.1" +version = "1.6.0" dependencies = [ "base64-simd", "bytes", @@ -380,7 +418,7 @@ dependencies = [ [[package]] name = "aws-types" -version = "1.3.16" +version = "1.4.0" dependencies = [ "aws-credential-types", "aws-smithy-async", @@ -419,6 +457,26 @@ version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" +[[package]] +name = "bindgen" +version = "0.72.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "itertools", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex 1.3.0", + "syn", +] + [[package]] name = "bit-set" version = "0.8.0" @@ -521,7 +579,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", - "shlex", + "jobserver", + "libc", + "shlex 2.0.1", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", ] [[package]] @@ -566,6 +635,17 @@ dependencies = [ "half", ] +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clap" version = "4.6.1" @@ -591,6 +671,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +[[package]] +name = "cmake" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" +dependencies = [ + "cc", +] + [[package]] name = "cmov" version = "0.5.4" @@ -862,6 +951,12 @@ dependencies = [ "syn", ] +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "ecdsa" version = "0.16.9" @@ -967,6 +1062,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "futures-channel" version = "0.3.32" @@ -1053,6 +1154,12 @@ dependencies = [ "wasip3", ] +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + [[package]] name = "group" version = "0.13.0" @@ -1444,6 +1551,16 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + [[package]] name = "js-sys" version = "0.3.100" @@ -1473,6 +1590,16 @@ version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link", +] + [[package]] name = "linux-raw-sys" version = "0.12.1" @@ -1991,6 +2118,12 @@ dependencies = [ "xmlparser", ] +[[package]] +name = "rustc-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" + [[package]] name = "rustc_version" version = "0.4.1" @@ -2248,6 +2381,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "shlex" version = "2.0.1" diff --git a/aws/rust-runtime/aws-sigv4/Cargo.toml b/aws/rust-runtime/aws-sigv4/Cargo.toml index 5387a8b1168..c254cc61789 100644 --- a/aws/rust-runtime/aws-sigv4/Cargo.toml +++ b/aws/rust-runtime/aws-sigv4/Cargo.toml @@ -17,8 +17,19 @@ sign-http = ["dep:http0", "dep:percent-encoding", "dep:form_urlencoded"] sign-eventstream = ["dep:aws-smithy-eventstream"] sigv4a = ["dep:p256", "dep:crypto-bigint", "dep:subtle", "dep:zeroize"] +# Internal feature used to gate code that depends on aws-lc-rs being linked. +# Users should not enable this directly; choose `aws-lc-rs` or `fips` instead. +__aws-lc-rs = ["dep:aws-lc-rs"] +# Route SigV4 (and, with `sigv4a`, SigV4a) cryptographic primitives through +# `aws-lc-rs` (non-FIPS, backed by `aws-lc-sys`) instead of RustCrypto's +# `hmac` / `sha2` / `p256`. +aws-lc-rs = ["__aws-lc-rs", "aws-lc-rs?/aws-lc-sys"] +# Same as `aws-lc-rs`, but backed by the FIPS-validated `aws-lc-fips-sys`. +fips = ["__aws-lc-rs", "aws-lc-rs?/fips"] + [dependencies] aws-credential-types = { path = "../aws-credential-types" } +aws-lc-rs = { version = "1", default-features = false, optional = true } aws-smithy-eventstream = { path = "../../../rust-runtime/aws-smithy-eventstream", optional = true } aws-smithy-http = { path = "../../../rust-runtime/aws-smithy-http" } aws-smithy-runtime-api = { path = "../../../rust-runtime/aws-smithy-runtime-api", features = ["client"] } @@ -63,7 +74,8 @@ harness = false required-features = ["sigv4a"] [package.metadata.docs.rs] -all-features = true +all-features = false +features = ["aws-lc-rs", "sigv4a", "sign-http", "http1", "sign-eventstream", "http0-compat"] targets = ["x86_64-unknown-linux-gnu"] cargo-args = ["-Zunstable-options", "-Zrustdoc-scrape-examples"] rustdoc-args = ["--cfg", "docsrs"] diff --git a/aws/rust-runtime/aws-sigv4/benches/hmac.rs b/aws/rust-runtime/aws-sigv4/benches/hmac.rs index 2b7620c1ee3..8f310346e26 100644 --- a/aws/rust-runtime/aws-sigv4/benches/hmac.rs +++ b/aws/rust-runtime/aws-sigv4/benches/hmac.rs @@ -4,10 +4,14 @@ */ use criterion::{criterion_group, criterion_main, Criterion}; +#[cfg(not(feature = "__aws-lc-rs"))] use hmac::digest::FixedOutput; +#[cfg(not(feature = "__aws-lc-rs"))] use hmac::{Hmac, KeyInit, Mac}; +#[cfg(not(feature = "__aws-lc-rs"))] use sha2::Sha256; +#[cfg(not(feature = "__aws-lc-rs"))] pub fn hmac(c: &mut Criterion) { c.bench_function("hmac", |b| { b.iter(|| { @@ -19,6 +23,16 @@ pub fn hmac(c: &mut Criterion) { }); } +#[cfg(feature = "__aws-lc-rs")] +pub fn hmac(c: &mut Criterion) { + c.bench_function("hmac", |b| { + b.iter(|| { + let key = aws_lc_rs::hmac::Key::new(aws_lc_rs::hmac::HMAC_SHA256, b"secret"); + aws_lc_rs::hmac::sign(&key, b"hello, world") + }) + }); +} + criterion_group! { name = benches; diff --git a/aws/rust-runtime/aws-sigv4/src/http_request/test.rs b/aws/rust-runtime/aws-sigv4/src/http_request/test.rs index ee365508259..afecd8ebb20 100644 --- a/aws/rust-runtime/aws-sigv4/src/http_request/test.rs +++ b/aws/rust-runtime/aws-sigv4/src/http_request/test.rs @@ -310,7 +310,9 @@ pub(crate) mod v4a { sign, PayloadChecksumKind, SessionTokenMode, SignatureLocation, SigningSettings, }; use crate::sign::v4a; + #[cfg(not(feature = "__aws-lc-rs"))] use p256::ecdsa::signature::Verifier; + #[cfg(not(feature = "__aws-lc-rs"))] use p256::ecdsa::{DerSignature, SigningKey}; use std::time::Duration; use time::format_description::well_known::Rfc3339; @@ -369,12 +371,33 @@ pub(crate) mod v4a { let creds = params.credentials().unwrap(); let signing_key = v4a::generate_signing_key(creds.access_key_id(), creds.secret_access_key()); - let sig = DerSignature::try_from(hex::decode(out.signature).unwrap().as_slice()).unwrap(); - - let signing_key = SigningKey::from_slice(signing_key.as_ref()).unwrap(); - let peer_public_key = signing_key.verifying_key(); + let sig_bytes = hex::decode(out.signature).unwrap(); let sts = actual_string_to_sign.as_bytes(); - peer_public_key.verify(sts, &sig).unwrap(); + + #[cfg(not(feature = "__aws-lc-rs"))] + { + let sig = DerSignature::try_from(sig_bytes.as_slice()).unwrap(); + let signing_key = SigningKey::from_slice(signing_key.as_ref()).unwrap(); + let peer_public_key = signing_key.verifying_key(); + peer_public_key.verify(sts, &sig).unwrap(); + } + #[cfg(feature = "__aws-lc-rs")] + { + use aws_lc_rs::signature::KeyPair as _; + let scalar: &[u8; 32] = signing_key.as_ref().try_into().unwrap(); + let der = v4a::scalar_to_sec1_p256_der(scalar); + let key_pair = aws_lc_rs::signature::EcdsaKeyPair::from_private_key_der( + &aws_lc_rs::signature::ECDSA_P256_SHA256_ASN1_SIGNING, + &der, + ) + .unwrap(); + let pub_key = key_pair.public_key().as_ref(); + let upk = aws_lc_rs::signature::UnparsedPublicKey::new( + &aws_lc_rs::signature::ECDSA_P256_SHA256_ASN1, + pub_key, + ); + upk.verify(sts, &sig_bytes).unwrap(); + } // TODO(sigv4a) - use public.key.json as verifying key? } diff --git a/aws/rust-runtime/aws-sigv4/src/sign/v4.rs b/aws/rust-runtime/aws-sigv4/src/sign/v4.rs index 42f59801d68..bfc315f49f0 100644 --- a/aws/rust-runtime/aws-sigv4/src/sign/v4.rs +++ b/aws/rust-runtime/aws-sigv4/src/sign/v4.rs @@ -11,19 +11,30 @@ use crate::{ use aws_credential_types::Credentials; use aws_smithy_runtime_api::{client::identity::Identity, http::Headers}; use bytes::Bytes; +#[cfg(not(feature = "__aws-lc-rs"))] use hmac::{digest::FixedOutput, Hmac, KeyInit, Mac}; +#[cfg(not(feature = "__aws-lc-rs"))] use sha2::{Digest, Sha256}; use std::time::SystemTime; /// HashedPayload = Lowercase(HexEncode(Hash(requestPayload))) #[allow(dead_code)] // Unused when compiling without certain features +#[cfg(not(feature = "__aws-lc-rs"))] pub(crate) fn sha256_hex_string(bytes: impl AsRef<[u8]>) -> String { let mut hasher = Sha256::new(); hasher.update(bytes); hex::encode(hasher.finalize_fixed()) } +/// HashedPayload = Lowercase(HexEncode(Hash(requestPayload))) +#[allow(dead_code)] // Unused when compiling without certain features +#[cfg(feature = "__aws-lc-rs")] +pub(crate) fn sha256_hex_string(bytes: impl AsRef<[u8]>) -> String { + hex::encode(aws_lc_rs::digest::digest(&aws_lc_rs::digest::SHA256, bytes.as_ref()).as_ref()) +} + /// Calculates a Sigv4 signature +#[cfg(not(feature = "__aws-lc-rs"))] pub fn calculate_signature(signing_key: impl AsRef<[u8]>, string_to_sign: &[u8]) -> String { let mut mac = Hmac::::new_from_slice(signing_key.as_ref()) .expect("HMAC can take key of any size"); @@ -31,7 +42,15 @@ pub fn calculate_signature(signing_key: impl AsRef<[u8]>, string_to_sign: &[u8]) hex::encode(mac.finalize_fixed()) } +/// Calculates a Sigv4 signature +#[cfg(feature = "__aws-lc-rs")] +pub fn calculate_signature(signing_key: impl AsRef<[u8]>, string_to_sign: &[u8]) -> String { + let key = aws_lc_rs::hmac::Key::new(aws_lc_rs::hmac::HMAC_SHA256, signing_key.as_ref()); + hex::encode(aws_lc_rs::hmac::sign(&key, string_to_sign).as_ref()) +} + /// Generates a signing key for Sigv4 +#[cfg(not(feature = "__aws-lc-rs"))] pub fn generate_signing_key( secret: &str, time: SystemTime, @@ -66,6 +85,26 @@ pub fn generate_signing_key( mac.finalize_fixed() } +/// Generates a signing key for Sigv4 +#[cfg(feature = "__aws-lc-rs")] +pub fn generate_signing_key( + secret: &str, + time: SystemTime, + region: &str, + service: &str, +) -> impl AsRef<[u8]> { + use aws_lc_rs::hmac::{sign, Key, HMAC_SHA256}; + + let secret = format!("AWS4{secret}"); + let tag = sign( + &Key::new(HMAC_SHA256, secret.as_bytes()), + format_date(time).as_bytes(), + ); + let tag = sign(&Key::new(HMAC_SHA256, tag.as_ref()), region.as_bytes()); + let tag = sign(&Key::new(HMAC_SHA256, tag.as_ref()), service.as_bytes()); + sign(&Key::new(HMAC_SHA256, tag.as_ref()), b"aws4_request") +} + /// Parameters to use when signing. #[derive(Debug)] #[non_exhaustive] diff --git a/aws/rust-runtime/aws-sigv4/src/sign/v4a.rs b/aws/rust-runtime/aws-sigv4/src/sign/v4a.rs index 6067d33ca1d..d89a251176c 100644 --- a/aws/rust-runtime/aws-sigv4/src/sign/v4a.rs +++ b/aws/rust-runtime/aws-sigv4/src/sign/v4a.rs @@ -6,9 +6,13 @@ use aws_smithy_runtime_api::client::identity::Identity; use bytes::{BufMut, BytesMut}; use crypto_bigint::{CheckedAdd, CheckedSub, Encoding, U256}; +#[cfg(not(feature = "__aws-lc-rs"))] use hmac::{digest::FixedOutput, Hmac, KeyInit, Mac}; +#[cfg(not(feature = "__aws-lc-rs"))] use p256::ecdsa::signature::Signer; +#[cfg(not(feature = "__aws-lc-rs"))] use p256::ecdsa::{DerSignature, SigningKey}; +#[cfg(not(feature = "__aws-lc-rs"))] use sha2::Sha256; use std::io::Write; use std::sync::LazyLock; @@ -25,13 +29,64 @@ static BIG_N_MINUS_2: LazyLock = LazyLock::new(|| { ORDER.checked_sub(&U256::from(2u32)).unwrap() }); +/// Wraps a P-256 scalar in a minimal RFC 5915 SEC1 `ECPrivateKey` DER blob. +/// +/// AWS-LC parses this via [`aws_lc_rs::signature::EcdsaKeyPair::from_private_key_der`] and +/// derives the public point internally — the `publicKey [1] BIT STRING OPTIONAL` field is +/// allowed to be absent by RFC 5915, which lets the caller avoid pulling in a separate EC +/// implementation just to compute the public key. +/// +/// Output layout (51 bytes): +/// 30 31 SEQUENCE, length 49 +/// 02 01 01 INTEGER 1 (version = ecPrivkeyVer1) +/// 04 20 <32> OCTET STRING (privateKey scalar) +/// A0 0A [0] EXPLICIT (parameters) +/// 06 08 2A 86 48 CE 3D 03 01 07 OID 1.2.840.10045.3.1.7 (prime256v1) +#[cfg(feature = "__aws-lc-rs")] +pub(crate) fn scalar_to_sec1_p256_der(scalar: &[u8; 32]) -> [u8; 51] { + let mut out = [0u8; 51]; + out[0] = 0x30; + out[1] = 0x31; + out[2] = 0x02; + out[3] = 0x01; + out[4] = 0x01; + out[5] = 0x04; + out[6] = 0x20; + out[7..39].copy_from_slice(scalar); + out[39] = 0xA0; + out[40] = 0x0A; + out[41..51].copy_from_slice(&[0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07]); + out +} + /// Calculates a Sigv4a signature +#[cfg(not(feature = "__aws-lc-rs"))] pub fn calculate_signature(signing_key: impl AsRef<[u8]>, string_to_sign: &[u8]) -> String { let signing_key = SigningKey::from_slice(signing_key.as_ref()).unwrap(); let signature: DerSignature = signing_key.sign(string_to_sign); hex::encode(signature.as_bytes()) } +/// Calculates a Sigv4a signature +#[cfg(feature = "__aws-lc-rs")] +pub fn calculate_signature(signing_key: impl AsRef<[u8]>, string_to_sign: &[u8]) -> String { + let scalar: &[u8; 32] = signing_key + .as_ref() + .try_into() + .expect("sigv4a signing key is always a 32-byte P-256 scalar"); + let der = scalar_to_sec1_p256_der(scalar); + let key_pair = aws_lc_rs::signature::EcdsaKeyPair::from_private_key_der( + &aws_lc_rs::signature::ECDSA_P256_SHA256_ASN1_SIGNING, + &der, + ) + .expect("scalar-derived SEC1 DER is well-formed"); + let rng = aws_lc_rs::rand::SystemRandom::new(); + let signature = key_pair + .sign(&rng, string_to_sign) + .expect("ECDSA signing should not fail with a valid key"); + hex::encode(signature.as_ref()) +} + /// Generates a signing key for Sigv4a signing. pub fn generate_signing_key(access_key: &str, secret_access_key: &str) -> impl AsRef<[u8]> { // Capacity is the secret access key length plus the length of "AWS4A" @@ -41,7 +96,7 @@ pub fn generate_signing_key(access_key: &str, secret_access_key: &str) -> impl A // Capacity is the access key length plus the counter byte let mut kdf_context = Zeroizing::new(Vec::with_capacity(access_key.len() + 1)); let mut counter = Zeroizing::new(1u8); - let key = loop { + let d = loop { write!(kdf_context, "{access_key}").unwrap(); kdf_context.push(*counter); @@ -50,14 +105,11 @@ pub fn generate_signing_key(access_key: &str, secret_access_key: &str) -> impl A fis.append(&mut kdf_context); fis.put_i32(256); - let mut mac = - Hmac::::new_from_slice(&input_key).expect("HMAC can take key of any size"); - let mut buf = BytesMut::new(); buf.put_i32(1); buf.put_slice(&fis); - mac.update(&buf); - let k0 = U256::from_be_bytes(mac.finalize_fixed().into()); + + let k0 = hmac_sha256_for_kdf(&input_key, &buf); // It would be more secure for this to be a constant time comparison, but because this // is for client usage, that's not as big a deal. @@ -65,8 +117,7 @@ pub fn generate_signing_key(access_key: &str, secret_access_key: &str) -> impl A let pk = k0 .checked_add(&U256::ONE) .expect("k0 is always less than U256::MAX"); - let d = Zeroizing::new(pk.to_be_bytes()); - break SigningKey::from_slice(d.as_ref()).unwrap(); + break Zeroizing::new(pk.to_be_bytes()); } *counter = counter @@ -74,7 +125,25 @@ pub fn generate_signing_key(access_key: &str, secret_access_key: &str) -> impl A .expect("counter will never get to 255"); }; - key.to_bytes() + *d +} + +#[cfg(not(feature = "__aws-lc-rs"))] +fn hmac_sha256_for_kdf(key: &[u8], msg: &[u8]) -> U256 { + let mut mac = Hmac::::new_from_slice(key).expect("HMAC can take key of any size"); + mac.update(msg); + U256::from_be_bytes(mac.finalize_fixed().into()) +} + +#[cfg(feature = "__aws-lc-rs")] +fn hmac_sha256_for_kdf(key: &[u8], msg: &[u8]) -> U256 { + let key = aws_lc_rs::hmac::Key::new(aws_lc_rs::hmac::HMAC_SHA256, key); + let tag = aws_lc_rs::hmac::sign(&key, msg); + let bytes: [u8; 32] = tag + .as_ref() + .try_into() + .expect("HMAC-SHA256 tag is always 32 bytes"); + U256::from_be_bytes(bytes) } /// Parameters to use when signing.