AWS SDK

AWS SDK

rev. d4cf8723f87e3eeea43ec509b72d8fc04e50d452

Files changed:

tmp-codegen-diff/aws-sdk/sdk/aws-config/Cargo.toml

@@ -44,44 +104,104 @@
   64     64   
version = "0.61.4"
   65     65   
   66     66   
[dependencies.aws-smithy-runtime]
   67     67   
path = "../aws-smithy-runtime"
   68     68   
features = ["client"]
   69     69   
version = "1.8.5"
   70     70   
   71     71   
[dependencies.aws-smithy-runtime-api]
   72     72   
path = "../aws-smithy-runtime-api"
   73     73   
features = ["client"]
   74         -
version = "1.8.4"
          74  +
version = "1.8.5"
   75     75   
   76     76   
[dependencies.aws-smithy-types]
   77     77   
path = "../aws-smithy-types"
   78     78   
version = "1.3.2"
   79     79   
   80     80   
[dependencies.aws-types]
   81     81   
path = "../aws-types"
   82     82   
version = "1.3.8"
   83     83   
   84     84   
[dependencies.time]
@@ -111,111 +157,157 @@
  131    131   
version = "1.8.5"
  132    132   
  133    133   
[dev-dependencies.aws-smithy-http-client]
  134    134   
path = "../aws-smithy-http-client"
  135    135   
features = ["default-client", "test-util"]
  136    136   
version = "1.0.6"
  137    137   
  138    138   
[dev-dependencies.aws-smithy-runtime-api]
  139    139   
path = "../aws-smithy-runtime-api"
  140    140   
features = ["test-util"]
  141         -
version = "1.8.4"
         141  +
version = "1.8.5"
  142    142   
  143    143   
[dev-dependencies.futures-util]
  144    144   
version = "0.3.29"
  145    145   
default-features = false
  146    146   
  147    147   
[dev-dependencies.tracing-subscriber]
  148    148   
version = "0.3.16"
  149    149   
features = ["fmt", "json"]
  150    150   
  151    151   
[dev-dependencies.tokio]

tmp-codegen-diff/aws-sdk/sdk/aws-credential-types/Cargo.toml

@@ -7,7 +49,49 @@
   27     27   
path = "../aws-smithy-async"
   28     28   
version = "1.2.5"
   29     29   
   30     30   
[dependencies.aws-smithy-types]
   31     31   
path = "../aws-smithy-types"
   32     32   
version = "1.3.2"
   33     33   
   34     34   
[dependencies.aws-smithy-runtime-api]
   35     35   
path = "../aws-smithy-runtime-api"
   36     36   
features = ["client", "http-auth"]
   37         -
version = "1.8.4"
          37  +
version = "1.8.5"
   38     38   
   39     39   
[dev-dependencies]
   40     40   
async-trait = "0.1.74"
   41     41   
   42     42   
[dev-dependencies.aws-smithy-runtime-api]
   43     43   
path = "../aws-smithy-runtime-api"
   44     44   
features = ["test-util"]
   45         -
version = "1.8.4"
          45  +
version = "1.8.5"
   46     46   
   47     47   
[dev-dependencies.tokio]
   48     48   
version = "1.23.1"
   49     49   
features = ["full", "test-util", "rt"]

tmp-codegen-diff/aws-sdk/sdk/aws-runtime/Cargo.toml

@@ -33,33 +144,144 @@
   53     53   
version = "0.62.2"
   54     54   
   55     55   
[dependencies.aws-smithy-runtime]
   56     56   
path = "../aws-smithy-runtime"
   57     57   
features = ["client"]
   58     58   
version = "1.8.5"
   59     59   
   60     60   
[dependencies.aws-smithy-runtime-api]
   61     61   
path = "../aws-smithy-runtime-api"
   62     62   
features = ["client"]
   63         -
version = "1.8.4"
          63  +
version = "1.8.5"
   64     64   
   65     65   
[dependencies.aws-smithy-types]
   66     66   
path = "../aws-smithy-types"
   67     67   
version = "1.3.2"
   68     68   
   69     69   
[dependencies.aws-types]
   70     70   
path = "../aws-types"
   71     71   
version = "1.3.8"
   72     72   
   73     73   
[dependencies.http-02x]
   74     74   
package = "http"
   75     75   
version = "0.2.9"
   76     76   
   77     77   
[dependencies.http-body-04x]
   78     78   
package = "http-body"
   79     79   
version = "0.4.5"
   80     80   
   81     81   
[dependencies.http-1x]
   82     82   
package = "http"
   83     83   
version = "1.1.0"
   84     84   
optional = true
   85     85   
   86     86   
[dependencies.http-body-1x]
   87     87   
package = "http-body"
   88     88   
version = "1.0.0"
   89     89   
optional = true
   90     90   
   91     91   
[dependencies.regex-lite]
   92     92   
version = "0.1.5"
   93     93   
optional = true
   94     94   
   95     95   
[dependencies.uuid]
   96     96   
version = "1"
   97     97   
   98     98   
[dev-dependencies]
   99     99   
arbitrary = "1.3"
  100    100   
bytes-utils = "0.1.2"
  101    101   
convert_case = "0.6.0"
  102    102   
proptest = "1.2"
  103    103   
serde_json = "1"
  104    104   
tracing-test = "0.2.4"
  105    105   
  106    106   
[dev-dependencies.aws-credential-types]
  107    107   
path = "../aws-credential-types"
  108    108   
features = ["test-util"]
  109    109   
version = "1.2.4"
  110    110   
  111    111   
[dev-dependencies.aws-smithy-async]
  112    112   
path = "../aws-smithy-async"
  113    113   
features = ["test-util"]
  114    114   
version = "1.2.5"
  115    115   
  116    116   
[dev-dependencies.aws-smithy-protocol-test]
  117    117   
path = "../aws-smithy-protocol-test"
  118    118   
version = "0.63.4"
  119    119   
  120    120   
[dev-dependencies.aws-smithy-runtime-api]
  121    121   
path = "../aws-smithy-runtime-api"
  122    122   
features = ["test-util"]
  123         -
version = "1.8.4"
         123  +
version = "1.8.5"
  124    124   
  125    125   
[dev-dependencies.aws-smithy-types]
  126    126   
path = "../aws-smithy-types"
  127    127   
features = ["test-util"]
  128    128   
version = "1.3.2"
  129    129   
  130    130   
[dev-dependencies.futures-util]
  131    131   
version = "0.3.29"
  132    132   
default-features = false
  133    133   

tmp-codegen-diff/aws-sdk/sdk/aws-sigv4/Cargo.toml

@@ -31,31 +91,91 @@
   51     51   
optional = true
   52     52   
version = "0.60.10"
   53     53   
   54     54   
[dependencies.aws-smithy-http]
   55     55   
path = "../aws-smithy-http"
   56     56   
version = "0.62.2"
   57     57   
   58     58   
[dependencies.aws-smithy-runtime-api]
   59     59   
path = "../aws-smithy-runtime-api"
   60     60   
features = ["client"]
   61         -
version = "1.8.4"
          61  +
version = "1.8.5"
   62     62   
   63     63   
[dependencies.aws-smithy-types]
   64     64   
path = "../aws-smithy-types"
   65     65   
version = "1.3.2"
   66     66   
   67     67   
[dependencies.form_urlencoded]
   68     68   
version = "1.2.1"
   69     69   
optional = true
   70     70   
   71     71   
[dependencies.http0]
@@ -94,94 +130,130 @@
  114    114   
criterion = "0.5"
  115    115   
  116    116   
[dev-dependencies.aws-credential-types]
  117    117   
path = "../aws-credential-types"
  118    118   
features = ["test-util", "hardcoded-credentials"]
  119    119   
version = "1.2.4"
  120    120   
  121    121   
[dev-dependencies.aws-smithy-runtime-api]
  122    122   
path = "../aws-smithy-runtime-api"
  123    123   
features = ["client", "test-util"]
  124         -
version = "1.8.4"
         124  +
version = "1.8.5"
  125    125   
  126    126   
[dev-dependencies.time]
  127    127   
version = "0.3.5"
  128    128   
features = ["parsing"]
  129    129   
[target."cfg(not(any(target_arch = \"powerpc\", target_arch = \"powerpc64\")))".dev-dependencies]
  130    130   
ring = "0.17.5"

tmp-codegen-diff/aws-sdk/sdk/aws-smithy-compression/Cargo.toml

@@ -3,3 +63,63 @@
   23     23   
futures-util = "0.3"
   24     24   
pin-project-lite = "0.2.14"
   25     25   
tracing = "0.1.40"
   26     26   
   27     27   
[dependencies.aws-smithy-types]
   28     28   
path = "../aws-smithy-types"
   29     29   
version = "1.3.2"
   30     30   
   31     31   
[dependencies.aws-smithy-runtime-api]
   32     32   
path = "../aws-smithy-runtime-api"
   33         -
version = "1.8.4"
          33  +
version = "1.8.5"
   34     34   
   35     35   
[dependencies.http-0-2]
   36     36   
package = "http"
   37     37   
version = "0.2.9"
   38     38   
optional = true
   39     39   
   40     40   
[dependencies.http-1-0]
   41     41   
package = "http"
   42     42   
version = "1"
   43     43   
optional = true

tmp-codegen-diff/aws-sdk/sdk/aws-smithy-http-client/Cargo.toml

@@ -32,32 +92,92 @@
   52     52   
pin-project-lite = "0.2.14"
   53     53   
tracing = "0.1.40"
   54     54   
   55     55   
[dependencies.aws-smithy-async]
   56     56   
path = "../aws-smithy-async"
   57     57   
version = "1.2.5"
   58     58   
   59     59   
[dependencies.aws-smithy-runtime-api]
   60     60   
path = "../aws-smithy-runtime-api"
   61     61   
features = ["client"]
   62         -
version = "1.8.4"
          62  +
version = "1.8.5"
   63     63   
   64     64   
[dependencies.aws-smithy-types]
   65     65   
path = "../aws-smithy-types"
   66     66   
version = "1.3.2"
   67     67   
   68     68   
[dependencies.aws-smithy-protocol-test]
   69     69   
path = "../aws-smithy-protocol-test"
   70     70   
optional = true
   71     71   
version = "0.63.4"
   72     72   
@@ -171,171 +221,221 @@
  191    191   
tokio-rustls = "0.26.1"
  192    192   
  193    193   
[dev-dependencies.aws-smithy-async]
  194    194   
path = "../aws-smithy-async"
  195    195   
features = ["rt-tokio", "test-util"]
  196    196   
version = "1.2.5"
  197    197   
  198    198   
[dev-dependencies.aws-smithy-runtime-api]
  199    199   
path = "../aws-smithy-runtime-api"
  200    200   
features = ["test-util"]
  201         -
version = "1.8.4"
         201  +
version = "1.8.5"
  202    202   
  203    203   
[dev-dependencies.aws-smithy-types]
  204    204   
path = "../aws-smithy-types"
  205    205   
features = ["http-body-0-4-x", "test-util"]
  206    206   
version = "1.3.2"
  207    207   
  208    208   
[dev-dependencies.http-body-util]
  209    209   
version = "0.1.2"
  210    210   
  211    211   
[dev-dependencies.hyper-util]

tmp-codegen-diff/aws-sdk/sdk/aws-smithy-http/Cargo.toml

@@ -7,7 +67,67 @@
   27     27   
futures-core = "0.3.31"
   28     28   
   29     29   
[dependencies.aws-smithy-eventstream]
   30     30   
path = "../aws-smithy-eventstream"
   31     31   
optional = true
   32     32   
version = "0.60.10"
   33     33   
   34     34   
[dependencies.aws-smithy-runtime-api]
   35     35   
path = "../aws-smithy-runtime-api"
   36     36   
features = ["client", "http-02x"]
   37         -
version = "1.8.4"
          37  +
version = "1.8.5"
   38     38   
   39     39   
[dependencies.aws-smithy-types]
   40     40   
path = "../aws-smithy-types"
   41     41   
features = ["byte-stream-poll-next", "http-body-0-4-x"]
   42     42   
version = "1.3.2"
   43     43   
   44     44   
[dependencies.http-02x]
   45     45   
package = "http"
   46     46   
version = "0.2.9"
   47     47   

tmp-codegen-diff/aws-sdk/sdk/aws-smithy-mocks-experimental/Cargo.toml

@@ -1,1 +29,29 @@
   16     16   
targets = ["x86_64-unknown-linux-gnu"]
   17     17   
cargo-args = ["-Zunstable-options", "-Zrustdoc-scrape-examples"]
   18     18   
rustdoc-args = ["--cfg", "docsrs"]
   19     19   
[dependencies.aws-smithy-types]
   20     20   
path = "../aws-smithy-types"
   21     21   
version = "1.3.2"
   22     22   
   23     23   
[dependencies.aws-smithy-runtime-api]
   24     24   
path = "../aws-smithy-runtime-api"
   25     25   
features = ["client", "http-02x"]
   26         -
version = "1.8.4"
          26  +
version = "1.8.5"
   27     27   
[dev-dependencies.tokio]
   28     28   
version = "1"
   29     29   
features = ["full"]

tmp-codegen-diff/aws-sdk/sdk/aws-smithy-mocks/Cargo.toml

@@ -1,1 +44,44 @@
   16     16   
[dependencies]
   17     17   
http = "1"
   18     18   
   19     19   
[dependencies.aws-smithy-types]
   20     20   
path = "../aws-smithy-types"
   21     21   
version = "1.3.2"
   22     22   
   23     23   
[dependencies.aws-smithy-runtime-api]
   24     24   
path = "../aws-smithy-runtime-api"
   25     25   
features = ["client", "http-1x"]
   26         -
version = "1.8.4"
          26  +
version = "1.8.5"
   27     27   
   28     28   
[dependencies.aws-smithy-http-client]
   29     29   
path = "../aws-smithy-http-client"
   30     30   
features = ["test-util"]
   31     31   
version = "1.0.6"
   32     32   
[dev-dependencies.tokio]
   33     33   
version = "1"
   34     34   
features = ["full"]
   35     35   
   36     36   
[dev-dependencies.aws-smithy-async]

tmp-codegen-diff/aws-sdk/sdk/aws-smithy-observability/Cargo.toml

@@ -1,1 +20,20 @@
    7      7   
edition = "2021"
    8      8   
license = "Apache-2.0"
    9      9   
repository = "https://github.com/awslabs/smithy-rs"
   10     10   
[package.metadata.docs.rs]
   11     11   
all-features = true
   12     12   
targets = ["x86_64-unknown-linux-gnu"]
   13     13   
cargo-args = ["-Zunstable-options", "-Zrustdoc-scrape-examples"]
   14     14   
rustdoc-args = ["--cfg", "docsrs"]
   15     15   
[dependencies.aws-smithy-runtime-api]
   16     16   
path = "../aws-smithy-runtime-api"
   17         -
version = "1.8.4"
          17  +
version = "1.8.5"
   18     18   
   19     19   
[dev-dependencies]
   20     20   
serial_test = "3.1.1"

tmp-codegen-diff/aws-sdk/sdk/aws-smithy-protocol-test/Cargo.toml

@@ -1,1 +0,31 @@
   21     21   
http = "0.2.9"
   22     22   
pretty_assertions = "1.3"
   23     23   
regex-lite = "0.1.5"
   24     24   
roxmltree = "0.14.1"
   25     25   
serde_json = "1.0.128"
   26     26   
thiserror = "2"
   27     27   
   28     28   
[dependencies.aws-smithy-runtime-api]
   29     29   
path = "../aws-smithy-runtime-api"
   30     30   
features = ["client"]
   31         -
version = "1.8.4"
          31  +
version = "1.8.5"

tmp-codegen-diff/aws-sdk/sdk/aws-smithy-runtime-api/Cargo.toml

@@ -1,1 +34,34 @@
    1      1   
# Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
    2      2   
[package]
    3      3   
name = "aws-smithy-runtime-api"
    4         -
version = "1.8.4"
           4  +
version = "1.8.5"
    5      5   
authors = ["AWS Rust SDK Team <aws-sdk-rust@amazon.com>", "Zelda Hessler <zhessler@amazon.com>"]
    6      6   
description = "Smithy runtime types."
    7      7   
edition = "2021"
    8      8   
license = "Apache-2.0"
    9      9   
repository = "https://github.com/smithy-lang/smithy-rs"
   10     10   
[package.metadata.docs.rs]
   11     11   
all-features = true
   12     12   
targets = ["x86_64-unknown-linux-gnu"]
   13     13   
cargo-args = ["-Zunstable-options", "-Zrustdoc-scrape-examples"]
   14     14   
rustdoc-args = ["--cfg", "docsrs"]

tmp-codegen-diff/aws-sdk/sdk/aws-smithy-runtime-api/src/client/auth.rs

@@ -1,1 +47,48 @@
    8      8   
use crate::box_error::BoxError;
    9      9   
use crate::client::identity::{Identity, SharedIdentityResolver};
   10     10   
use crate::client::orchestrator::HttpRequest;
   11     11   
use crate::client::runtime_components::sealed::ValidateConfig;
   12     12   
use crate::client::runtime_components::{GetIdentityResolver, RuntimeComponents};
   13     13   
use crate::impl_shared_conversions;
   14     14   
use aws_smithy_types::config_bag::{ConfigBag, FrozenLayer, Storable, StoreReplace};
   15     15   
use aws_smithy_types::type_erasure::TypeErasedBox;
   16     16   
use aws_smithy_types::Document;
   17     17   
use std::borrow::Cow;
          18  +
use std::cmp::Ordering;
   18     19   
use std::fmt;
   19     20   
use std::sync::Arc;
   20     21   
   21     22   
/// Auth schemes for the HTTP `Authorization` header.
   22     23   
#[cfg(feature = "http-auth")]
   23     24   
pub mod http;
   24     25   
   25     26   
/// Static auth scheme option resolver.
   26     27   
pub mod static_resolver;
   27     28   
@@ -112,113 +224,266 @@
  132    133   
    }
  133    134   
}
  134    135   
  135    136   
impl std::error::Error for AuthSchemeOptionBuilderError {}
  136    137   
  137    138   
/// New type around an auth scheme ID.
  138    139   
///
  139    140   
/// Each auth scheme must have a unique string identifier associated with it,
  140    141   
/// which is used to refer to auth schemes by the auth scheme option resolver, and
  141    142   
/// also used to select an identity resolver to use.
  142         -
#[derive(Clone, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)]
         143  +
#[derive(Clone, Debug, Eq)]
  143    144   
pub struct AuthSchemeId {
  144    145   
    scheme_id: Cow<'static, str>,
  145    146   
}
  146    147   
  147    148   
// See: https://doc.rust-lang.org/std/convert/trait.AsRef.html#reflexivity
  148    149   
impl AsRef<AuthSchemeId> for AuthSchemeId {
  149    150   
    fn as_ref(&self) -> &AuthSchemeId {
  150    151   
        self
  151    152   
    }
  152    153   
}
  153    154   
  154    155   
impl AuthSchemeId {
  155    156   
    /// Creates a new auth scheme ID.
  156    157   
    pub const fn new(scheme_id: &'static str) -> Self {
  157    158   
        Self {
  158    159   
            scheme_id: Cow::Borrowed(scheme_id),
  159    160   
        }
  160    161   
    }
  161    162   
  162    163   
    /// Returns the string equivalent of this auth scheme ID.
  163    164   
    #[deprecated(
  164    165   
        note = "This function is no longer functional. Use `inner` instead",
  165    166   
        since = "1.8.0"
  166    167   
    )]
  167    168   
    pub const fn as_str(&self) -> &'static str {
  168    169   
        match self.scheme_id {
  169    170   
            Cow::Borrowed(val) => val,
  170    171   
            Cow::Owned(_) => {
  171    172   
                // cannot obtain `&'static str` from `String` unless we use `Box::leak`
  172    173   
                ""
  173    174   
            }
  174    175   
        }
  175    176   
    }
  176    177   
  177    178   
    /// Returns the string equivalent of this auth scheme ID.
  178    179   
    pub fn inner(&self) -> &str {
  179    180   
        &self.scheme_id
  180    181   
    }
  181    182   
}
  182    183   
  183    184   
impl From<&'static str> for AuthSchemeId {
  184    185   
    fn from(scheme_id: &'static str) -> Self {
  185    186   
        Self::new(scheme_id)
  186    187   
    }
  187    188   
}
  188    189   
  189    190   
impl From<Cow<'static, str>> for AuthSchemeId {
  190    191   
    fn from(scheme_id: Cow<'static, str>) -> Self {
  191    192   
        Self { scheme_id }
  192    193   
    }
  193    194   
}
  194    195   
         196  +
impl PartialEq for AuthSchemeId {
         197  +
    fn eq(&self, other: &Self) -> bool {
         198  +
        let self_normalized = normalize_auth_scheme_id(&self.scheme_id);
         199  +
        let other_normalized = normalize_auth_scheme_id(&other.scheme_id);
         200  +
        self_normalized == other_normalized
         201  +
    }
         202  +
}
         203  +
         204  +
impl std::hash::Hash for AuthSchemeId {
         205  +
    fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
         206  +
        // Hash the normalized scheme ID to ensure equal `AuthSchemeId`s have equal hashes
         207  +
        normalize_auth_scheme_id(&self.scheme_id).hash(state);
         208  +
    }
         209  +
}
         210  +
         211  +
impl Ord for AuthSchemeId {
         212  +
    fn cmp(&self, other: &Self) -> Ordering {
         213  +
        let self_normalized = normalize_auth_scheme_id(&self.scheme_id);
         214  +
        let other_normalized = normalize_auth_scheme_id(&other.scheme_id);
         215  +
        self_normalized.cmp(other_normalized)
         216  +
    }
         217  +
}
         218  +
         219  +
impl PartialOrd for AuthSchemeId {
         220  +
    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
         221  +
        Some(self.cmp(other))
         222  +
    }
         223  +
}
         224  +
         225  +
// Normalizes auth scheme IDs for comparison and hashing by treating "no_auth" and "noAuth" as equivalent
         226  +
// by converting "no_auth" to "noAuth".
         227  +
// This is for backward compatibility; "no_auth" was incorrectly used in pre-GA versions of the SDK and
         228  +
// could be used still in some places.
         229  +
fn normalize_auth_scheme_id(scheme_id: &str) -> &str {
         230  +
    if scheme_id == "no_auth" {
         231  +
        "noAuth"
         232  +
    } else {
         233  +
        scheme_id
         234  +
    }
         235  +
}
         236  +
  195    237   
/// Parameters needed to resolve auth scheme options.
  196    238   
///
  197    239   
/// Most generated clients will use the [`StaticAuthSchemeOptionResolver`](static_resolver::StaticAuthSchemeOptionResolver),
  198    240   
/// which doesn't require any parameters for resolution (and has its own empty params struct).
  199    241   
///
  200    242   
/// However, more complex auth scheme resolvers may need modeled parameters in order to resolve
  201    243   
/// the auth scheme options. For those, this params struct holds a type erased box so that any
  202    244   
/// kind of parameters can be contained within, and type casted by the auth scheme option resolver
  203    245   
/// implementation.
  204    246   
#[derive(Debug)]
@@ -427,469 +0,750 @@
  447    489   
impl<T> From<T> for AuthSchemePreference
  448    490   
where
  449    491   
    T: AsRef<[AuthSchemeId]>,
  450    492   
{
  451    493   
    fn from(slice: T) -> Self {
  452    494   
        AuthSchemePreference {
  453    495   
            preference_list: slice.as_ref().to_vec(),
  454    496   
        }
  455    497   
    }
  456    498   
}
         499  +
         500  +
#[cfg(test)]
         501  +
mod tests {
         502  +
    use super::*;
         503  +
         504  +
    #[test]
         505  +
    fn test_auth_scheme_id_equality_no_auth_variants() {
         506  +
        let no_auth_legacy = AuthSchemeId::new("no_auth");
         507  +
        let no_auth_camel = AuthSchemeId::new("noAuth");
         508  +
         509  +
        // Test that "no_auth" and "noAuth" are considered equal
         510  +
        assert_eq!(no_auth_legacy, no_auth_camel);
         511  +
        assert_eq!(no_auth_camel, no_auth_legacy);
         512  +
    }
         513  +
         514  +
    #[test]
         515  +
    fn test_auth_scheme_id_equality_same_schemes() {
         516  +
        let sigv4_1 = AuthSchemeId::new("sigv4");
         517  +
        let sigv4_2 = AuthSchemeId::new("sigv4");
         518  +
         519  +
        // Test that identical schemes are equal
         520  +
        assert_eq!(sigv4_1, sigv4_2);
         521  +
    }
         522  +
         523  +
    #[test]
         524  +
    fn test_auth_scheme_id_inequality_different_schemes() {
         525  +
        let sigv4 = AuthSchemeId::new("sigv4");
         526  +
        let sigv4a = AuthSchemeId::new("sigv4a");
         527  +
        let bearer = AuthSchemeId::new("httpBearerAuth");
         528  +
         529  +
        // Test that different schemes are not equal
         530  +
        assert_ne!(sigv4, sigv4a);
         531  +
        assert_ne!(sigv4, bearer);
         532  +
        assert_ne!(sigv4a, bearer);
         533  +
    }
         534  +
         535  +
    #[test]
         536  +
    fn test_auth_scheme_id_no_auth_vs_other_schemes() {
         537  +
        let no_auth_legacy = AuthSchemeId::new("no_auth");
         538  +
        let no_auth_camel = AuthSchemeId::new("noAuth");
         539  +
        let sigv4 = AuthSchemeId::new("sigv4");
         540  +
        let bearer = AuthSchemeId::new("httpBearerAuth");
         541  +
         542  +
        // Test that no_auth variants are not equal to other schemes
         543  +
        assert_ne!(no_auth_legacy, sigv4);
         544  +
        assert_ne!(no_auth_camel, sigv4);
         545  +
        assert_ne!(no_auth_legacy, bearer);
         546  +
        assert_ne!(no_auth_camel, bearer);
         547  +
         548  +
        // Test symmetry
         549  +
        assert_ne!(sigv4, no_auth_legacy);
         550  +
        assert_ne!(sigv4, no_auth_camel);
         551  +
        assert_ne!(bearer, no_auth_legacy);
         552  +
        assert_ne!(bearer, no_auth_camel);
         553  +
    }
         554  +
         555  +
    #[test]
         556  +
    fn test_normalize_auth_scheme_id_function() {
         557  +
        // Test the helper function directly
         558  +
        assert_eq!("noAuth", normalize_auth_scheme_id("no_auth"));
         559  +
        assert_eq!("noAuth", normalize_auth_scheme_id("noAuth"));
         560  +
        assert_eq!("sigv4", normalize_auth_scheme_id("sigv4"));
         561  +
        assert_eq!("httpBearerAuth", normalize_auth_scheme_id("httpBearerAuth"));
         562  +
        assert_eq!("custom_scheme", normalize_auth_scheme_id("custom_scheme"));
         563  +
    }
         564  +
         565  +
    #[test]
         566  +
    fn test_auth_scheme_id_reflexivity() {
         567  +
        let no_auth_legacy = AuthSchemeId::new("no_auth");
         568  +
        let no_auth_camel = AuthSchemeId::new("noAuth");
         569  +
        let sigv4 = AuthSchemeId::new("sigv4");
         570  +
         571  +
        // Test reflexivity: x == x
         572  +
        assert_eq!(no_auth_legacy, no_auth_legacy);
         573  +
        assert_eq!(no_auth_camel, no_auth_camel);
         574  +
        assert_eq!(sigv4, sigv4);
         575  +
    }
         576  +
         577  +
    #[test]
         578  +
    fn test_auth_scheme_id_transitivity() {
         579  +
        let no_auth_1 = AuthSchemeId::new("no_auth");
         580  +
        let no_auth_2 = AuthSchemeId::new("noAuth");
         581  +
        let no_auth_3 = AuthSchemeId::new("no_auth");
         582  +
         583  +
        // Test transitivity: if a == b and b == c, then a == c
         584  +
        assert_eq!(no_auth_1, no_auth_2);
         585  +
        assert_eq!(no_auth_2, no_auth_3);
         586  +
        assert_eq!(no_auth_1, no_auth_3);
         587  +
    }
         588  +
         589  +
    #[test]
         590  +
    fn test_auth_scheme_id_hash_consistency() {
         591  +
        use std::collections::hash_map::DefaultHasher;
         592  +
        use std::hash::{Hash, Hasher};
         593  +
         594  +
        fn calculate_hash<T: Hash>(t: &T) -> u64 {
         595  +
            let mut s = DefaultHasher::new();
         596  +
            t.hash(&mut s);
         597  +
            s.finish()
         598  +
        }
         599  +
         600  +
        // Test that equal AuthSchemeIds have the same hash
         601  +
        let no_auth_legacy = AuthSchemeId::new("no_auth");
         602  +
        let no_auth_camel = AuthSchemeId::new("noAuth");
         603  +
         604  +
        // Since these are equal, they must have the same hash
         605  +
        assert_eq!(no_auth_legacy, no_auth_camel);
         606  +
        assert_eq!(
         607  +
            calculate_hash(&no_auth_legacy),
         608  +
            calculate_hash(&no_auth_camel)
         609  +
        );
         610  +
         611  +
        // Test that identical schemes have the same hash
         612  +
        let sigv4_1 = AuthSchemeId::new("sigv4");
         613  +
        let sigv4_2 = AuthSchemeId::new("sigv4");
         614  +
        assert_eq!(calculate_hash(&sigv4_1), calculate_hash(&sigv4_2));
         615  +
         616  +
        // Test that different schemes have different hashes (highly likely but not guaranteed)
         617  +
        let sigv4 = AuthSchemeId::new("sigv4");
         618  +
        let sigv4a = AuthSchemeId::new("sigv4a");
         619  +
        let bearer = AuthSchemeId::new("httpBearerAuth");
         620  +
         621  +
        // These should be different (though hash collisions are theoretically possible)
         622  +
        assert_ne!(calculate_hash(&sigv4), calculate_hash(&sigv4a));
         623  +
        assert_ne!(calculate_hash(&sigv4), calculate_hash(&bearer));
         624  +
        assert_ne!(calculate_hash(&sigv4a), calculate_hash(&bearer));
         625  +
    }
         626  +
         627  +
    #[test]
         628  +
    fn test_auth_scheme_id_hash_in_collections() {
         629  +
        use std::collections::{HashMap, HashSet};
         630  +
         631  +
        let no_auth_legacy = AuthSchemeId::new("no_auth");
         632  +
        let no_auth_camel = AuthSchemeId::new("noAuth");
         633  +
        let sigv4 = AuthSchemeId::new("sigv4");
         634  +
        let bearer = AuthSchemeId::new("httpBearerAuth");
         635  +
         636  +
        // Test HashSet behavior - equal items should be treated as the same
         637  +
        let mut set = HashSet::new();
         638  +
        set.insert(no_auth_legacy.clone());
         639  +
        set.insert(no_auth_camel.clone());
         640  +
        set.insert(sigv4.clone());
         641  +
        set.insert(bearer.clone());
         642  +
         643  +
        // Should only have 3 items since no_auth_legacy and no_auth_camel are equal
         644  +
        assert_eq!(set.len(), 3);
         645  +
        assert!(set.contains(&no_auth_legacy));
         646  +
        assert!(set.contains(&no_auth_camel));
         647  +
        assert!(set.contains(&sigv4));
         648  +
        assert!(set.contains(&bearer));
         649  +
         650  +
        // Test HashMap behavior
         651  +
        let mut map = HashMap::new();
         652  +
        map.insert(no_auth_legacy.clone(), "legacy");
         653  +
        map.insert(no_auth_camel.clone(), "camel");
         654  +
        map.insert(sigv4.clone(), "v4");
         655  +
         656  +
        // Should only have 2 entries since no_auth_legacy and no_auth_camel are equal
         657  +
        assert_eq!(map.len(), 2);
         658  +
        // The value should be "camel" since it was inserted last
         659  +
        assert_eq!(map.get(&no_auth_legacy), Some(&"camel"));
         660  +
        assert_eq!(map.get(&no_auth_camel), Some(&"camel"));
         661  +
        assert_eq!(map.get(&sigv4), Some(&"v4"));
         662  +
    }
         663  +
         664  +
    #[test]
         665  +
    fn test_auth_scheme_id_ord_consistency() {
         666  +
        let no_auth_legacy = AuthSchemeId::new("no_auth");
         667  +
        let no_auth_camel = AuthSchemeId::new("noAuth");
         668  +
        let sigv4 = AuthSchemeId::new("sigv4");
         669  +
        let sigv4a = AuthSchemeId::new("sigv4a");
         670  +
        let bearer = AuthSchemeId::new("httpBearerAuth");
         671  +
         672  +
        // Test that equal items compare as equal
         673  +
        assert_eq!(no_auth_legacy.cmp(&no_auth_camel), Ordering::Equal);
         674  +
        assert_eq!(no_auth_camel.cmp(&no_auth_legacy), Ordering::Equal);
         675  +
         676  +
        // Test reflexivity: x.cmp(&x) == Equal
         677  +
        assert_eq!(sigv4.cmp(&sigv4), Ordering::Equal);
         678  +
        assert_eq!(bearer.cmp(&bearer), Ordering::Equal);
         679  +
         680  +
        // Test that ordering is consistent with string ordering of normalized values
         681  +
        // "sigv4" < "sigv4a" lexicographically
         682  +
        assert_eq!(sigv4.cmp(&sigv4a), Ordering::Less);
         683  +
        assert_eq!(sigv4a.cmp(&sigv4), Ordering::Greater);
         684  +
         685  +
        // Test transitivity with a chain of comparisons
         686  +
        let schemes = vec![
         687  +
            AuthSchemeId::new("a_scheme"),
         688  +
            AuthSchemeId::new("b_scheme"),
         689  +
            AuthSchemeId::new("c_scheme"),
         690  +
        ];
         691  +
         692  +
        // a < b < c should hold
         693  +
        assert_eq!(schemes[0].cmp(&schemes[1]), Ordering::Less);
         694  +
        assert_eq!(schemes[1].cmp(&schemes[2]), Ordering::Less);
         695  +
        assert_eq!(schemes[0].cmp(&schemes[2]), Ordering::Less);
         696  +
    }
         697  +
         698  +
    #[test]
         699  +
    fn test_auth_scheme_id_ord_sorting() {
         700  +
        let mut schemes = vec![
         701  +
            AuthSchemeId::new("z_last"),
         702  +
            AuthSchemeId::new("no_auth"), // Should be normalized to "noAuth"
         703  +
            AuthSchemeId::new("sigv4a"),
         704  +
            AuthSchemeId::new("noAuth"),
         705  +
            AuthSchemeId::new("sigv4"),
         706  +
            AuthSchemeId::new("a_first"),
         707  +
        ];
         708  +
         709  +
        schemes.sort();
         710  +
        dbg!(&schemes);
         711  +
         712  +
        // Expected order after sorting (considering normalization):
         713  +
        // "a_first", "sigv4", "sigv4a", "no_auth", "noAuth", "z_last"
         714  +
        // Note: "no_auth" gets normalized to "noAuth" for comparison
         715  +
        let expected_inner_values =
         716  +
            vec!["a_first", "no_auth", "noAuth", "sigv4", "sigv4a", "z_last"];
         717  +
         718  +
        assert_eq!(schemes.len(), expected_inner_values.len());
         719  +
        for (scheme, expected) in schemes.iter().zip(expected_inner_values.iter()) {
         720  +
            assert_eq!(scheme.inner(), *expected);
         721  +
        }
         722  +
    }
         723  +
         724  +
    #[test]
         725  +
    fn test_auth_scheme_id_ord_with_cow_variants() {
         726  +
        use std::borrow::Cow;
         727  +
         728  +
        // Test ordering with different Cow variants
         729  +
        let borrowed = AuthSchemeId::new("test_scheme");
         730  +
        let owned = AuthSchemeId::from(Cow::Owned("test_scheme".to_string()));
         731  +
        let borrowed2 = AuthSchemeId::from(Cow::Borrowed("test_scheme"));
         732  +
         733  +
        // All should be equal
         734  +
        assert_eq!(borrowed, owned);
         735  +
        assert_eq!(borrowed, borrowed2);
         736  +
        assert_eq!(owned, borrowed2);
         737  +
         738  +
        // All should have the same ordering
         739  +
        assert_eq!(borrowed.cmp(&owned), Ordering::Equal);
         740  +
        assert_eq!(borrowed.cmp(&borrowed2), Ordering::Equal);
         741  +
        assert_eq!(owned.cmp(&borrowed2), Ordering::Equal);
         742  +
         743  +
        // Test with different values
         744  +
        let borrowed_a = AuthSchemeId::new("a_scheme");
         745  +
        let owned_b = AuthSchemeId::from(Cow::Owned("b_scheme".to_string()));
         746  +
         747  +
        assert_eq!(borrowed_a.cmp(&owned_b), Ordering::Less);
         748  +
        assert_eq!(owned_b.cmp(&borrowed_a), Ordering::Greater);
         749  +
    }
         750  +
}

tmp-codegen-diff/aws-sdk/sdk/aws-smithy-runtime/Cargo.toml

@@ -23,23 +123,123 @@
   43     43   
[dependencies.aws-smithy-http]
   44     44   
path = "../aws-smithy-http"
   45     45   
version = "0.62.2"
   46     46   
   47     47   
[dependencies.aws-smithy-observability]
   48     48   
path = "../aws-smithy-observability"
   49     49   
version = "0.1.3"
   50     50   
   51     51   
[dependencies.aws-smithy-runtime-api]
   52     52   
path = "../aws-smithy-runtime-api"
   53         -
version = "1.8.4"
          53  +
version = "1.8.5"
   54     54   
   55     55   
[dependencies.aws-smithy-types]
   56     56   
path = "../aws-smithy-types"
   57     57   
features = ["http-body-0-4-x"]
   58     58   
version = "1.3.2"
   59     59   
   60     60   
[dependencies.aws-smithy-http-client]
   61     61   
path = "../aws-smithy-http-client"
   62     62   
optional = true
   63     63   
version = "1.0.6"
   64     64   
   65     65   
[dependencies.http-02x]
   66     66   
package = "http"
   67     67   
version = "0.2.9"
   68     68   
   69     69   
[dependencies.http-1x]
   70     70   
package = "http"
   71     71   
version = "1"
   72     72   
   73     73   
[dependencies.http-body-04x]
   74     74   
package = "http-body"
   75     75   
version = "0.4.5"
   76     76   
   77     77   
[dependencies.http-body-1x]
   78     78   
package = "http-body"
   79     79   
version = "1"
   80     80   
   81     81   
[dependencies.tokio]
   82     82   
version = "1.40.0"
   83     83   
features = []
   84     84   
   85     85   
[dependencies.tracing-subscriber]
   86     86   
version = "0.3.16"
   87     87   
optional = true
   88     88   
features = ["env-filter", "fmt", "json"]
   89     89   
   90     90   
[dev-dependencies]
   91     91   
approx = "0.5.1"
   92     92   
fastrand = "2.3.0"
   93     93   
futures-util = "0.3.29"
   94     94   
pretty_assertions = "1.4.0"
   95     95   
tracing-test = "0.2.1"
   96     96   
   97     97   
[dev-dependencies.aws-smithy-async]
   98     98   
path = "../aws-smithy-async"
   99     99   
features = ["rt-tokio", "test-util"]
  100    100   
version = "1.2.5"
  101    101   
  102    102   
[dev-dependencies.aws-smithy-runtime-api]
  103    103   
path = "../aws-smithy-runtime-api"
  104    104   
features = ["test-util"]
  105         -
version = "1.8.4"
         105  +
version = "1.8.5"
  106    106   
  107    107   
[dev-dependencies.aws-smithy-types]
  108    108   
path = "../aws-smithy-types"
  109    109   
features = ["test-util"]
  110    110   
version = "1.3.2"
  111    111   
  112    112   
[dev-dependencies.tokio]
  113    113   
version = "1.25"
  114    114   
features = ["macros", "rt", "rt-multi-thread", "test-util", "full"]
  115    115   

tmp-codegen-diff/aws-sdk/sdk/aws-smithy-wasm/Cargo.toml

@@ -1,1 +33,33 @@
   15     15   
   16     16   
[dependencies]
   17     17   
bytes = "1.10.0"
   18     18   
http = "1.0.0"
   19     19   
tracing = "0.1.40"
   20     20   
wasi = "0.12.1"
   21     21   
   22     22   
[dependencies.aws-smithy-runtime-api]
   23     23   
path = "../aws-smithy-runtime-api"
   24     24   
features = ["http-1x"]
   25         -
version = "1.8.4"
          25  +
version = "1.8.5"
   26     26   
   27     27   
[dependencies.aws-smithy-http]
   28     28   
path = "../aws-smithy-http"
   29     29   
version = "0.62.2"
   30     30   
   31     31   
[dependencies.aws-smithy-types]
   32     32   
path = "../aws-smithy-types"
   33     33   
version = "1.3.2"