AWS SDK

AWS SDK

rev. 3d0cec2ed9c901eb8bb5bdc6616d1c86f3cbd876

Files changed:

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

@@ -13,13 +77,77 @@
   33     33   
   34     34   
[dependencies]
   35     35   
bytes = "1.1.0"
   36     36   
http = "1"
   37     37   
url = "2.5.4"
   38     38   
fastrand = "2.3.0"
   39     39   
   40     40   
[dependencies.aws-credential-types]
   41     41   
path = "../aws-credential-types"
   42     42   
features = ["test-util"]
   43         -
version = "1.2.4"
          43  +
version = "1.2.5"
   44     44   
   45     45   
[dependencies.aws-runtime]
   46     46   
path = "../aws-runtime"
   47         -
version = "1.5.9"
          47  +
version = "1.5.10"
   48     48   
   49     49   
[dependencies.aws-sdk-sts]
   50     50   
path = "../sts"
   51     51   
default-features = false
   52     52   
version = "0.0.0-local"
   53     53   
   54     54   
[dependencies.aws-smithy-async]
   55     55   
path = "../aws-smithy-async"
   56     56   
version = "1.2.5"
   57     57   

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

@@ -1,1 +49,53 @@
    1      1   
# Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
    2      2   
[package]
    3      3   
name = "aws-credential-types"
    4         -
version = "1.2.4"
           4  +
version = "1.2.5"
    5      5   
authors = ["AWS Rust SDK Team <aws-sdk-rust@amazon.com>"]
    6      6   
description = "Types for AWS SDK credentials."
    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"]
   15     15   
   16     16   
[package.metadata.smithy-rs-release-tooling]
   17     17   
stable = true
   18     18   
   19     19   
[features]
   20     20   
hardcoded-credentials = []
   21     21   
test-util = ["aws-smithy-runtime-api/test-util"]
   22     22   
   23     23   
[dependencies]
   24     24   
zeroize = "1.7.0"
   25     25   
          26  +
[dependencies.aws-features]
          27  +
path = "../aws-features"
          28  +
version = "0.1.0"
          29  +
   26     30   
[dependencies.aws-smithy-async]
   27     31   
path = "../aws-smithy-async"
   28     32   
version = "1.2.5"
   29     33   
   30     34   
[dependencies.aws-smithy-types]
   31     35   
path = "../aws-smithy-types"
   32     36   
version = "1.3.2"
   33     37   
   34     38   
[dependencies.aws-smithy-runtime-api]
   35     39   
path = "../aws-smithy-runtime-api"

tmp-codegen-diff/aws-sdk/sdk/aws-credential-types/src/credentials_impl.rs

@@ -1,1 +55,82 @@
    1      1   
/*
    2      2   
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
    3      3   
 * SPDX-License-Identifier: Apache-2.0
    4      4   
 */
    5      5   
           6  +
use aws_features::sdk_feature::AwsSdkFeature;
           7  +
use aws_smithy_types::config_bag::Layer;
    6      8   
use aws_smithy_types::date_time::Format;
           9  +
use aws_smithy_types::type_erasure::TypeErasedBox;
          10  +
use std::any::{Any, TypeId};
          11  +
use std::collections::HashMap;
    7     12   
use std::fmt;
    8     13   
use std::fmt::{Debug, Formatter};
    9     14   
use std::sync::Arc;
   10     15   
use std::time::{SystemTime, UNIX_EPOCH};
   11     16   
use zeroize::Zeroizing;
   12     17   
   13     18   
use aws_smithy_runtime_api::client::identity::Identity;
   14     19   
   15     20   
use crate::attributes::AccountId;
   16     21   
   17     22   
/// AWS SDK Credentials
   18     23   
///
   19     24   
/// An opaque struct representing credentials that may be used in an AWS SDK, modeled on
   20     25   
/// the [CRT credentials implementation](https://github.com/awslabs/aws-c-auth/blob/main/source/credentials.c).
   21     26   
///
   22     27   
/// When `Credentials` is dropped, its contents are zeroed in memory. Credentials uses an interior Arc to ensure
   23     28   
/// that even when cloned, credentials don't exist in multiple memory locations.
   24         -
#[derive(Clone, Eq, PartialEq)]
   25         -
pub struct Credentials(Arc<Inner>);
          29  +
pub struct Credentials(Arc<Inner>, HashMap<TypeId, TypeErasedBox>);
          30  +
          31  +
impl Clone for Credentials {
          32  +
    fn clone(&self) -> Self {
          33  +
        let mut new_map = HashMap::new();
          34  +
        for (k, v) in &self.1 {
          35  +
            new_map.insert(
          36  +
                *k,
          37  +
                v.try_clone()
          38  +
                    .expect("values are guaranteed to implement `Clone` via `set_property`"),
          39  +
            );
          40  +
        }
          41  +
        Self(self.0.clone(), new_map)
          42  +
    }
          43  +
}
          44  +
          45  +
impl PartialEq for Credentials {
          46  +
    #[inline] // specified in the output of cargo expand of the original `#[derive(PartialEq)]`
          47  +
    fn eq(&self, other: &Credentials) -> bool {
          48  +
        self.0 == other.0
          49  +
    }
          50  +
}
          51  +
          52  +
impl Eq for Credentials {}
   26     53   
   27     54   
#[derive(Clone, Eq, PartialEq)]
   28     55   
struct Inner {
   29     56   
    access_key_id: Zeroizing<String>,
   30     57   
    secret_access_key: Zeroizing<String>,
   31     58   
    session_token: Zeroizing<Option<String>>,
   32     59   
   33     60   
    /// Credential Expiry
   34     61   
    ///
   35     62   
    /// A SystemTime at which the credentials should no longer be used because they have expired.
@@ -66,93 +133,163 @@
   86    113   
    ///
   87    114   
    /// This is intended to be used from a custom credentials provider implementation.
   88    115   
    /// It is __NOT__ secure to hardcode credentials into your application.
   89    116   
    pub fn new(
   90    117   
        access_key_id: impl Into<String>,
   91    118   
        secret_access_key: impl Into<String>,
   92    119   
        session_token: Option<String>,
   93    120   
        expires_after: Option<SystemTime>,
   94    121   
        provider_name: &'static str,
   95    122   
    ) -> Self {
   96         -
        Credentials(Arc::new(Inner {
   97         -
            access_key_id: Zeroizing::new(access_key_id.into()),
   98         -
            secret_access_key: Zeroizing::new(secret_access_key.into()),
   99         -
            session_token: Zeroizing::new(session_token),
  100         -
            expires_after,
  101         -
            account_id: None,
  102         -
            provider_name,
  103         -
        }))
         123  +
        Credentials(
         124  +
            Arc::new(Inner {
         125  +
                access_key_id: Zeroizing::new(access_key_id.into()),
         126  +
                secret_access_key: Zeroizing::new(secret_access_key.into()),
         127  +
                session_token: Zeroizing::new(session_token),
         128  +
                expires_after,
         129  +
                account_id: None,
         130  +
                provider_name,
         131  +
            }),
         132  +
            HashMap::new(),
         133  +
        )
  104    134   
    }
  105    135   
  106    136   
    /// Creates `Credentials` from hardcoded access key, secret key, and session token.
  107    137   
    ///
  108    138   
    /// _Note: In general, you should prefer to use the credential providers that come
  109    139   
    /// with the AWS SDK to get credentials. It is __NOT__ secure to hardcode credentials
  110    140   
    /// into your application. If you're writing a custom credentials provider, then
  111    141   
    /// use [`Credentials::new`] instead of this._
  112    142   
    ///
  113    143   
    /// This function requires the `hardcoded-credentials` feature to be enabled.
@@ -161,191 +220,286 @@
  181    211   
  182    212   
    /// Returns the account ID.
  183    213   
    pub fn account_id(&self) -> Option<&AccountId> {
  184    214   
        self.0.account_id.as_ref()
  185    215   
    }
  186    216   
  187    217   
    /// Returns the session token.
  188    218   
    pub fn session_token(&self) -> Option<&str> {
  189    219   
        self.0.session_token.as_deref()
  190    220   
    }
         221  +
         222  +
    /// Set arbitrary property for `Credentials`
         223  +
    #[doc(hidden)]
         224  +
    pub fn set_property<T: Any + Clone + Debug + Send + Sync + 'static>(&mut self, prop: T) {
         225  +
        self.1
         226  +
            .insert(TypeId::of::<T>(), TypeErasedBox::new_with_clone(prop));
         227  +
    }
         228  +
         229  +
    /// Returns arbitrary property associated with this `Credentials`.
         230  +
    #[doc(hidden)]
         231  +
    pub fn get_property<T: Any + Debug + Send + Sync + 'static>(&self) -> Option<&T> {
         232  +
        self.1
         233  +
            .get(&TypeId::of::<T>())
         234  +
            .and_then(|b| b.downcast_ref())
         235  +
    }
         236  +
         237  +
    /// Attempts to retrieve a mutable reference to property of a given type `T`.
         238  +
    #[doc(hidden)]
         239  +
    pub fn get_property_mut<T: Any + Debug + Send + Sync + 'static>(&mut self) -> Option<&mut T> {
         240  +
        self.1
         241  +
            .get_mut(&TypeId::of::<T>())
         242  +
            .and_then(|b| b.downcast_mut())
         243  +
    }
         244  +
         245  +
    /// Returns a mutable reference to `T` if it is stored in the property, otherwise returns the
         246  +
    /// [`Default`] implementation of `T`.
         247  +
    #[doc(hidden)]
         248  +
    pub fn get_property_mut_or_default<T: Any + Clone + Debug + Default + Send + Sync + 'static>(
         249  +
        &mut self,
         250  +
    ) -> &mut T {
         251  +
        self.1
         252  +
            .entry(TypeId::of::<T>())
         253  +
            .or_insert_with(|| TypeErasedBox::new_with_clone(T::default()))
         254  +
            .downcast_mut()
         255  +
            .expect("typechecked")
         256  +
    }
  191    257   
}
  192    258   
  193    259   
/// Builder for [`Credentials`]
  194    260   
///
  195    261   
/// Similar to [`Credentials::new`], the use of the builder is intended for a custom credentials provider implementation.
  196    262   
/// It is __NOT__ secure to hardcode credentials into your application.
  197    263   
#[derive(Default, Clone)]
  198    264   
#[allow(missing_debug_implementations)] // for security reasons, and we can add manual `impl Debug` just like `Credentials`, if needed.
  199    265   
pub struct CredentialsBuilder {
  200    266   
    access_key_id: Option<Zeroizing<String>>,
@@ -232,298 +362,498 @@
  252    318   
    }
  253    319   
  254    320   
    /// Set provider name for the builder.
  255    321   
    pub fn provider_name(mut self, provider_name: &'static str) -> Self {
  256    322   
        self.provider_name = Some(provider_name);
  257    323   
        self
  258    324   
    }
  259    325   
  260    326   
    /// Build [`Credentials`] from the builder.
  261    327   
    pub fn build(self) -> Credentials {
  262         -
        Credentials(Arc::new(Inner {
  263         -
            access_key_id: self
  264         -
                .access_key_id
  265         -
                .expect("required field `access_key_id` missing"),
  266         -
            secret_access_key: self
  267         -
                .secret_access_key
  268         -
                .expect("required field `secret_access_key` missing"),
  269         -
            session_token: self.session_token,
  270         -
            expires_after: self.expires_after,
  271         -
            account_id: self.account_id,
  272         -
            provider_name: self
  273         -
                .provider_name
  274         -
                .expect("required field `provider_name` missing"),
  275         -
        }))
         328  +
        Credentials(
         329  +
            Arc::new(Inner {
         330  +
                access_key_id: self
         331  +
                    .access_key_id
         332  +
                    .expect("required field `access_key_id` missing"),
         333  +
                secret_access_key: self
         334  +
                    .secret_access_key
         335  +
                    .expect("required field `secret_access_key` missing"),
         336  +
                session_token: self.session_token,
         337  +
                expires_after: self.expires_after,
         338  +
                account_id: self.account_id,
         339  +
                provider_name: self
         340  +
                    .provider_name
         341  +
                    .expect("required field `provider_name` missing"),
         342  +
            }),
         343  +
            HashMap::new(),
         344  +
        )
  276    345   
    }
  277    346   
}
  278    347   
  279    348   
#[cfg(feature = "test-util")]
  280    349   
impl Credentials {
  281    350   
    /// Creates a test `Credentials` with no session token.
  282    351   
    pub fn for_tests() -> Self {
  283    352   
        Self::new(
  284    353   
            "ANOTREAL",
  285    354   
            "notrealrnrELgWzOk3IfjzDKtFBhDby",
  286    355   
            None,
  287    356   
            None,
  288    357   
            "test",
  289    358   
        )
  290    359   
    }
  291    360   
  292    361   
    /// Creates a test `Credentials` that include a session token.
  293    362   
    pub fn for_tests_with_session_token() -> Self {
  294    363   
        Self::new(
  295    364   
            "ANOTREAL",
  296    365   
            "notrealrnrELgWzOk3IfjzDKtFBhDby",
  297    366   
            Some("notarealsessiontoken".to_string()),
  298    367   
            None,
  299    368   
            "test",
  300    369   
        )
  301    370   
    }
  302    371   
}
  303    372   
  304    373   
#[cfg(feature = "test-util")]
  305    374   
impl CredentialsBuilder {
  306    375   
    /// Creates a test `CredentialsBuilder` with the required fields:
  307    376   
    /// `access_key_id`, `secret_access_key`, and `provider_name`.
  308    377   
    pub fn for_tests() -> Self {
  309    378   
        CredentialsBuilder::default()
  310    379   
            .access_key_id("ANOTREAL")
  311    380   
            .secret_access_key("notrealrnrELgWzOk3IfjzDKtFBhDby")
  312    381   
            .provider_name("test")
  313    382   
    }
  314    383   
}
  315    384   
  316    385   
impl From<Credentials> for Identity {
  317    386   
    fn from(val: Credentials) -> Self {
  318    387   
        let expiry = val.expiry();
  319    388   
        let mut builder = if let Some(account_id) = val.account_id() {
  320         -
            Identity::builder().property(account_id.clone()).data(val)
         389  +
            Identity::builder().property(account_id.clone())
  321    390   
        } else {
  322         -
            Identity::builder().data(val)
         391  +
            Identity::builder()
  323    392   
        };
         393  +
  324    394   
        builder.set_expiration(expiry);
  325         -
        builder.build().expect("set required fields")
         395  +
         396  +
        if let Some(features) = val.get_property::<Vec<AwsSdkFeature>>().cloned() {
         397  +
            let mut layer = Layer::new("IdentityResolutionFeatureIdTracking");
         398  +
            for feat in features {
         399  +
                layer.store_append(feat);
         400  +
            }
         401  +
            builder.set_property(layer.freeze());
         402  +
        }
         403  +
         404  +
        builder.data(val).build().expect("set required fields")
  326    405   
    }
  327    406   
}
  328    407   
  329    408   
#[cfg(test)]
  330    409   
mod test {
  331    410   
    use crate::Credentials;
         411  +
    use aws_features::sdk_feature::AwsSdkFeature;
         412  +
    use aws_smithy_runtime_api::client::identity::Identity;
         413  +
    use aws_smithy_types::config_bag::FrozenLayer;
  332    414   
    use std::time::{Duration, UNIX_EPOCH};
  333    415   
  334    416   
    #[test]
  335    417   
    fn debug_impl() {
  336    418   
        let creds = Credentials::new(
  337    419   
            "akid",
  338    420   
            "secret",
  339    421   
            Some("token".into()),
  340    422   
            Some(UNIX_EPOCH + Duration::from_secs(1234567890)),
  341    423   
            "debug tester",
  342    424   
        );
  343    425   
        assert_eq!(
  344    426   
            format!("{:?}", creds),
  345    427   
            r#"Credentials { provider_name: "debug tester", access_key_id: "akid", secret_access_key: "** redacted **", expires_after: "2009-02-13T23:31:30Z" }"#
  346    428   
        );
  347    429   
  348    430   
        // with account ID
  349    431   
        let creds = Credentials::builder()
  350    432   
            .access_key_id("akid")
  351    433   
            .secret_access_key("secret")
  352    434   
            .session_token("token")
  353    435   
            .expiry(UNIX_EPOCH + Duration::from_secs(1234567890))
  354    436   
            .account_id("012345678901")
  355    437   
            .provider_name("debug tester")
  356    438   
            .build();
  357    439   
        assert_eq!(
  358    440   
            format!("{:?}", creds),
  359    441   
            r#"Credentials { provider_name: "debug tester", access_key_id: "akid", secret_access_key: "** redacted **", expires_after: "2009-02-13T23:31:30Z", account_id: "012345678901" }"#
  360    442   
        );
  361    443   
    }
         444  +
         445  +
    #[test]
         446  +
    fn equality_ignores_properties() {
         447  +
        #[derive(Clone, Debug)]
         448  +
        struct Foo;
         449  +
        let mut creds1 = Credentials::new(
         450  +
            "akid",
         451  +
            "secret",
         452  +
            Some("token".into()),
         453  +
            Some(UNIX_EPOCH + Duration::from_secs(1234567890)),
         454  +
            "debug tester",
         455  +
        );
         456  +
        creds1.set_property(AwsSdkFeature::CredentialsCode);
         457  +
         458  +
        let mut creds2 = Credentials::new(
         459  +
            "akid",
         460  +
            "secret",
         461  +
            Some("token".into()),
         462  +
            Some(UNIX_EPOCH + Duration::from_secs(1234567890)),
         463  +
            "debug tester",
         464  +
        );
         465  +
        creds2.set_property(Foo);
         466  +
         467  +
        assert_eq!(creds1, creds2)
         468  +
    }
         469  +
         470  +
    #[test]
         471  +
    fn identity_inherits_feature_properties() {
         472  +
        let mut creds = Credentials::new(
         473  +
            "akid",
         474  +
            "secret",
         475  +
            Some("token".into()),
         476  +
            Some(UNIX_EPOCH + Duration::from_secs(1234567890)),
         477  +
            "debug tester",
         478  +
        );
         479  +
        let mut feature_props = vec![
         480  +
            AwsSdkFeature::CredentialsCode,
         481  +
            AwsSdkFeature::CredentialsStsSessionToken,
         482  +
        ];
         483  +
        creds.set_property(feature_props.clone());
         484  +
         485  +
        let identity = Identity::from(creds);
         486  +
         487  +
        let maybe_props = identity
         488  +
            .property::<FrozenLayer>()
         489  +
            .unwrap()
         490  +
            .load::<AwsSdkFeature>()
         491  +
            .cloned()
         492  +
            .collect::<Vec<AwsSdkFeature>>();
         493  +
         494  +
        // The props get reversed when being popped out of the StoreAppend
         495  +
        feature_props.reverse();
         496  +
        assert_eq!(maybe_props, feature_props)
         497  +
    }
  362    498   
}

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

@@ -0,1 +0,17 @@
           1  +
# Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
           2  +
[package]
           3  +
name = "aws-features"
           4  +
version = "0.1.0"
           5  +
edition = "2021"
           6  +
authors = ["AWS Rust SDK Team <aws-sdk-rust@amazon.com>"]
           7  +
description = "Code for handling user agent feature tracking."
           8  +
license = "Apache-2.0"
           9  +
repository = "https://github.com/smithy-lang/smithy-rs"
          10  +
[package.metadata.docs.rs]
          11  +
all-features = true
          12  +
targets = ["x86_64-unknown-linux-gnu"]
          13  +
cargo-args = ["-Zunstable-options", "-Zrustdoc-scrape-examples"]
          14  +
rustdoc-args = ["--cfg", "docsrs"]
          15  +
[dependencies.aws-smithy-types]
          16  +
path = "../aws-smithy-types"
          17  +
version = "1.3.2"

tmp-codegen-diff/aws-sdk/sdk/aws-features/LICENSE

@@ -0,1 +0,175 @@
           1  +
           2  +
                                 Apache License
           3  +
                           Version 2.0, January 2004
           4  +
                        http://www.apache.org/licenses/
           5  +
           6  +
   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
           7  +
           8  +
   1. Definitions.
           9  +
          10  +
      "License" shall mean the terms and conditions for use, reproduction,
          11  +
      and distribution as defined by Sections 1 through 9 of this document.
          12  +
          13  +
      "Licensor" shall mean the copyright owner or entity authorized by
          14  +
      the copyright owner that is granting the License.
          15  +
          16  +
      "Legal Entity" shall mean the union of the acting entity and all
          17  +
      other entities that control, are controlled by, or are under common
          18  +
      control with that entity. For the purposes of this definition,
          19  +
      "control" means (i) the power, direct or indirect, to cause the
          20  +
      direction or management of such entity, whether by contract or
          21  +
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
          22  +
      outstanding shares, or (iii) beneficial ownership of such entity.
          23  +
          24  +
      "You" (or "Your") shall mean an individual or Legal Entity
          25  +
      exercising permissions granted by this License.
          26  +
          27  +
      "Source" form shall mean the preferred form for making modifications,
          28  +
      including but not limited to software source code, documentation
          29  +
      source, and configuration files.
          30  +
          31  +
      "Object" form shall mean any form resulting from mechanical
          32  +
      transformation or translation of a Source form, including but
          33  +
      not limited to compiled object code, generated documentation,
          34  +
      and conversions to other media types.
          35  +
          36  +
      "Work" shall mean the work of authorship, whether in Source or
          37  +
      Object form, made available under the License, as indicated by a
          38  +
      copyright notice that is included in or attached to the work
          39  +
      (an example is provided in the Appendix below).
          40  +
          41  +
      "Derivative Works" shall mean any work, whether in Source or Object
          42  +
      form, that is based on (or derived from) the Work and for which the
          43  +
      editorial revisions, annotations, elaborations, or other modifications
          44  +
      represent, as a whole, an original work of authorship. For the purposes
          45  +
      of this License, Derivative Works shall not include works that remain
          46  +
      separable from, or merely link (or bind by name) to the interfaces of,
          47  +
      the Work and Derivative Works thereof.
          48  +
          49  +
      "Contribution" shall mean any work of authorship, including
          50  +
      the original version of the Work and any modifications or additions
          51  +
      to that Work or Derivative Works thereof, that is intentionally
          52  +
      submitted to Licensor for inclusion in the Work by the copyright owner
          53  +
      or by an individual or Legal Entity authorized to submit on behalf of
          54  +
      the copyright owner. For the purposes of this definition, "submitted"
          55  +
      means any form of electronic, verbal, or written communication sent
          56  +
      to the Licensor or its representatives, including but not limited to
          57  +
      communication on electronic mailing lists, source code control systems,
          58  +
      and issue tracking systems that are managed by, or on behalf of, the
          59  +
      Licensor for the purpose of discussing and improving the Work, but
          60  +
      excluding communication that is conspicuously marked or otherwise
          61  +
      designated in writing by the copyright owner as "Not a Contribution."
          62  +
          63  +
      "Contributor" shall mean Licensor and any individual or Legal Entity
          64  +
      on behalf of whom a Contribution has been received by Licensor and
          65  +
      subsequently incorporated within the Work.
          66  +
          67  +
   2. Grant of Copyright License. Subject to the terms and conditions of
          68  +
      this License, each Contributor hereby grants to You a perpetual,
          69  +
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
          70  +
      copyright license to reproduce, prepare Derivative Works of,
          71  +
      publicly display, publicly perform, sublicense, and distribute the
          72  +
      Work and such Derivative Works in Source or Object form.
          73  +
          74  +
   3. Grant of Patent License. Subject to the terms and conditions of
          75  +
      this License, each Contributor hereby grants to You a perpetual,
          76  +
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
          77  +
      (except as stated in this section) patent license to make, have made,
          78  +
      use, offer to sell, sell, import, and otherwise transfer the Work,
          79  +
      where such license applies only to those patent claims licensable
          80  +
      by such Contributor that are necessarily infringed by their
          81  +
      Contribution(s) alone or by combination of their Contribution(s)
          82  +
      with the Work to which such Contribution(s) was submitted. If You
          83  +
      institute patent litigation against any entity (including a
          84  +
      cross-claim or counterclaim in a lawsuit) alleging that the Work
          85  +
      or a Contribution incorporated within the Work constitutes direct
          86  +
      or contributory patent infringement, then any patent licenses
          87  +
      granted to You under this License for that Work shall terminate
          88  +
      as of the date such litigation is filed.
          89  +
          90  +
   4. Redistribution. You may reproduce and distribute copies of the
          91  +
      Work or Derivative Works thereof in any medium, with or without
          92  +
      modifications, and in Source or Object form, provided that You
          93  +
      meet the following conditions:
          94  +
          95  +
      (a) You must give any other recipients of the Work or
          96  +
          Derivative Works a copy of this License; and
          97  +
          98  +
      (b) You must cause any modified files to carry prominent notices
          99  +
          stating that You changed the files; and
         100  +
         101  +
      (c) You must retain, in the Source form of any Derivative Works
         102  +
          that You distribute, all copyright, patent, trademark, and
         103  +
          attribution notices from the Source form of the Work,
         104  +
          excluding those notices that do not pertain to any part of
         105  +
          the Derivative Works; and
         106  +
         107  +
      (d) If the Work includes a "NOTICE" text file as part of its
         108  +
          distribution, then any Derivative Works that You distribute must
         109  +
          include a readable copy of the attribution notices contained
         110  +
          within such NOTICE file, excluding those notices that do not
         111  +
          pertain to any part of the Derivative Works, in at least one
         112  +
          of the following places: within a NOTICE text file distributed
         113  +
          as part of the Derivative Works; within the Source form or
         114  +
          documentation, if provided along with the Derivative Works; or,
         115  +
          within a display generated by the Derivative Works, if and
         116  +
          wherever such third-party notices normally appear. The contents
         117  +
          of the NOTICE file are for informational purposes only and
         118  +
          do not modify the License. You may add Your own attribution
         119  +
          notices within Derivative Works that You distribute, alongside
         120  +
          or as an addendum to the NOTICE text from the Work, provided
         121  +
          that such additional attribution notices cannot be construed
         122  +
          as modifying the License.
         123  +
         124  +
      You may add Your own copyright statement to Your modifications and
         125  +
      may provide additional or different license terms and conditions
         126  +
      for use, reproduction, or distribution of Your modifications, or
         127  +
      for any such Derivative Works as a whole, provided Your use,
         128  +
      reproduction, and distribution of the Work otherwise complies with
         129  +
      the conditions stated in this License.
         130  +
         131  +
   5. Submission of Contributions. Unless You explicitly state otherwise,
         132  +
      any Contribution intentionally submitted for inclusion in the Work
         133  +
      by You to the Licensor shall be under the terms and conditions of
         134  +
      this License, without any additional terms or conditions.
         135  +
      Notwithstanding the above, nothing herein shall supersede or modify
         136  +
      the terms of any separate license agreement you may have executed
         137  +
      with Licensor regarding such Contributions.
         138  +
         139  +
   6. Trademarks. This License does not grant permission to use the trade
         140  +
      names, trademarks, service marks, or product names of the Licensor,
         141  +
      except as required for reasonable and customary use in describing the
         142  +
      origin of the Work and reproducing the content of the NOTICE file.
         143  +
         144  +
   7. Disclaimer of Warranty. Unless required by applicable law or
         145  +
      agreed to in writing, Licensor provides the Work (and each
         146  +
      Contributor provides its Contributions) on an "AS IS" BASIS,
         147  +
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
         148  +
      implied, including, without limitation, any warranties or conditions
         149  +
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
         150  +
      PARTICULAR PURPOSE. You are solely responsible for determining the
         151  +
      appropriateness of using or redistributing the Work and assume any
         152  +
      risks associated with Your exercise of permissions under this License.
         153  +
         154  +
   8. Limitation of Liability. In no event and under no legal theory,
         155  +
      whether in tort (including negligence), contract, or otherwise,
         156  +
      unless required by applicable law (such as deliberate and grossly
         157  +
      negligent acts) or agreed to in writing, shall any Contributor be
         158  +
      liable to You for damages, including any direct, indirect, special,
         159  +
      incidental, or consequential damages of any character arising as a
         160  +
      result of this License or out of the use or inability to use the
         161  +
      Work (including but not limited to damages for loss of goodwill,
         162  +
      work stoppage, computer failure or malfunction, or any and all
         163  +
      other commercial damages or losses), even if such Contributor
         164  +
      has been advised of the possibility of such damages.
         165  +
         166  +
   9. Accepting Warranty or Additional Liability. While redistributing
         167  +
      the Work or Derivative Works thereof, You may choose to offer,
         168  +
      and charge a fee for, acceptance of support, warranty, indemnity,
         169  +
      or other liability obligations and/or rights consistent with this
         170  +
      License. However, in accepting such obligations, You may act only
         171  +
      on Your own behalf and on Your sole responsibility, not on behalf
         172  +
      of any other Contributor, and only if You agree to indemnify,
         173  +
      defend, and hold each Contributor harmless for any liability
         174  +
      incurred by, or claims asserted against, such Contributor by reason
         175  +
      of your accepting any such warranty or additional liability.

tmp-codegen-diff/aws-sdk/sdk/aws-features/README.md

@@ -0,1 +0,7 @@
           1  +
# aws-features
           2  +
           3  +
Code for handling user agent feature tracking. This code is only meant to be used internally by the AWS SDK for Rust.
           4  +
           5  +
<!-- anchor_start:footer -->
           6  +
This crate is part of the [AWS SDK for Rust](https://awslabs.github.io/aws-sdk-rust/) and the [smithy-rs](https://github.com/smithy-lang/smithy-rs) code generator. In most cases, it should not be used directly.
           7  +
<!-- anchor_end:footer -->

tmp-codegen-diff/aws-sdk/sdk/aws-features/src/lib.rs

@@ -0,1 +0,21 @@
           1  +
/*
           2  +
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
           3  +
 * SPDX-License-Identifier: Apache-2.0
           4  +
 */
           5  +
           6  +
/* Automatically managed default lints */
           7  +
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
           8  +
/* End of automatically managed default lints */
           9  +
//! Runtime support code for the AWS SDK. This crate isn't intended to be used directly.
          10  +
          11  +
#![warn(
          12  +
    missing_docs,
          13  +
    rustdoc::missing_crate_level_docs,
          14  +
    missing_debug_implementations,
          15  +
    rust_2018_idioms,
          16  +
    unreachable_pub
          17  +
)]
          18  +
          19  +
/// AWS SDK feature identifies.
          20  +
#[doc(hidden)]
          21  +
pub mod sdk_feature;

tmp-codegen-diff/aws-sdk/sdk/aws-features/src/sdk_feature.rs

@@ -0,1 +0,58 @@
           1  +
/*
           2  +
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
           3  +
 * SPDX-License-Identifier: Apache-2.0
           4  +
 */
           5  +
           6  +
/// Note: This code originally lived in the `aws-runtime` crate. It was moved here to avoid circular dependencies
           7  +
/// This module is re-exported in `aws-runtime`, and so even though this is a pre-1.0 crate, this module should not
           8  +
/// have any breaking changes
           9  +
use aws_smithy_types::config_bag::{Storable, StoreAppend};
          10  +
          11  +
/// IDs for the features that may be used in the AWS SDK
          12  +
#[non_exhaustive]
          13  +
#[derive(Clone, Debug, Eq, PartialEq)]
          14  +
pub enum AwsSdkFeature {
          15  +
    /// Indicates that an operation was called by the S3 Transfer Manager
          16  +
    S3Transfer,
          17  +
    // Various features related to how Credentials are set
          18  +
    /// An operation called using credentials resolved from code, cli parameters, session object, or client instance
          19  +
    CredentialsCode,
          20  +
    /// An operation called using credentials resolved from environment variables
          21  +
    CredentialsEnvVars,
          22  +
    /// An operation called using credentials resolved from environment variables for assuming a role with STS using a web identity token
          23  +
    CredentialsEnvVarsStsWebIdToken,
          24  +
    /// An operation called using credentials resolved from STS using assume role
          25  +
    CredentialsStsAssumeRole,
          26  +
    /// An operation called using credentials resolved from STS using assume role with SAML
          27  +
    CredentialsStsAssumeRoleSaml,
          28  +
    /// An operation called using credentials resolved from STS using assume role with web identity
          29  +
    CredentialsStsAssumeRoleWebId,
          30  +
    /// An operation called using credentials resolved from STS using a federation token
          31  +
    CredentialsStsFederationToken,
          32  +
    /// An operation called using credentials resolved from STS using a session token
          33  +
    CredentialsStsSessionToken,
          34  +
    /// An operation called using credentials resolved from a config file(s) profile with static credentials
          35  +
    CredentialsProfile,
          36  +
    /// An operation called using credentials resolved from a source profile in a config file(s) profile
          37  +
    CredentialsProfileSourceProfile,
          38  +
    /// An operation called using credentials resolved from a named provider in a config file(s) profile
          39  +
    CredentialsProfileNamedProvider,
          40  +
    /// An operation called using credentials resolved from configuration for assuming a role with STS using web identity token in a config file(s) profile
          41  +
    CredentialsProfileStsWebIdToken,
          42  +
    /// An operation called using credentials resolved from an SSO session in a config file(s) profile
          43  +
    CredentialsProfileSso,
          44  +
    /// An operation called using credentials resolved from an SSO session
          45  +
    CredentialsSso,
          46  +
    /// An operation called using credentials resolved from a process in a config file(s) profile
          47  +
    CredentialsProfileProcess,
          48  +
    /// An operation called using credentials resolved from a process
          49  +
    CredentialsProcess,
          50  +
    /// An operation called using credentials resolved from an HTTP endpoint
          51  +
    CredentialsHttp,
          52  +
    /// An operation called using credentials resolved from the instance metadata service (IMDS)
          53  +
    CredentialsImds,
          54  +
}
          55  +
          56  +
impl Storable for AwsSdkFeature {
          57  +
    type Storer = StoreAppend<Self>;
          58  +
}

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

@@ -1,1 +0,18 @@
    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"]
   15     15   
[dependencies.aws-runtime]
   16     16   
path = "../aws-runtime"
   17     17   
features = ["http-02x"]
   18         -
version = "1.5.9"
          18  +
version = "1.5.10"

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

@@ -1,1 +65,69 @@
    1      1   
# Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
    2      2   
[package]
    3      3   
name = "aws-runtime"
    4         -
version = "1.5.9"
           4  +
version = "1.5.10"
    5      5   
authors = ["AWS Rust SDK Team <aws-sdk-rust@amazon.com>"]
    6      6   
description = "Runtime support code for the AWS SDK. This crate isn't intended to be used directly."
    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"]
   15     15   
   16     16   
[package.metadata.smithy-rs-release-tooling]
   17     17   
stable = true
   18     18   
   19     19   
[features]
   20     20   
event-stream = ["dep:aws-smithy-eventstream", "aws-sigv4/sign-eventstream"]
   21     21   
http-02x = []
   22     22   
http-1x = ["dep:http-1x", "dep:http-body-1x"]
   23     23   
test-util = ["dep:regex-lite"]
   24     24   
sigv4a = ["aws-sigv4/sigv4a"]
   25     25   
   26     26   
[dependencies]
   27     27   
bytes = "1.10.0"
   28     28   
fastrand = "2.3.0"
   29     29   
percent-encoding = "2.3.1"
   30     30   
pin-project-lite = "0.2.14"
   31     31   
tracing = "0.1.40"
   32     32   
   33     33   
[dependencies.aws-credential-types]
   34     34   
path = "../aws-credential-types"
   35         -
version = "1.2.4"
          35  +
version = "1.2.5"
          36  +
          37  +
[dependencies.aws-features]
          38  +
path = "../aws-features"
          39  +
version = "0.1.0"
   36     40   
   37     41   
[dependencies.aws-sigv4]
   38     42   
path = "../aws-sigv4"
   39     43   
features = ["http0-compat"]
   40     44   
version = "1.3.3"
   41     45   
   42     46   
[dependencies.aws-smithy-async]
   43     47   
path = "../aws-smithy-async"
   44     48   
version = "1.2.5"
   45     49   
@@ -79,83 +139,143 @@
   99    103   
arbitrary = "1.3"
  100    104   
bytes-utils = "0.1.2"
  101    105   
convert_case = "0.6.0"
  102    106   
proptest = "1.2"
  103    107   
serde_json = "1"
  104    108   
tracing-test = "0.2.4"
  105    109   
  106    110   
[dev-dependencies.aws-credential-types]
  107    111   
path = "../aws-credential-types"
  108    112   
features = ["test-util"]
  109         -
version = "1.2.4"
         113  +
version = "1.2.5"
  110    114   
  111    115   
[dev-dependencies.aws-smithy-async]
  112    116   
path = "../aws-smithy-async"
  113    117   
features = ["test-util"]
  114    118   
version = "1.2.5"
  115    119   
  116    120   
[dev-dependencies.aws-smithy-protocol-test]
  117    121   
path = "../aws-smithy-protocol-test"
  118    122   
version = "0.63.4"
  119    123   

tmp-codegen-diff/aws-sdk/sdk/aws-runtime/src/lib.rs

@@ -13,13 +53,53 @@
   33     33   
pub mod retries;
   34     34   
   35     35   
/// Supporting code for invocation ID headers in the AWS SDK.
   36     36   
pub mod invocation_id;
   37     37   
   38     38   
/// Supporting code for request metadata headers in the AWS SDK.
   39     39   
pub mod request_info;
   40     40   
   41     41   
/// AWS SDK feature identifies.
   42     42   
#[doc(hidden)]
   43         -
pub mod sdk_feature;
          43  +
pub use aws_features::sdk_feature;
   44     44   
   45     45   
/// Interceptor that determines the clock skew between the client and service.
   46     46   
pub mod service_clock_skew;
   47     47   
   48     48   
/// Filesystem utilities
   49     49   
pub mod fs_util;
   50     50   
   51     51   
/// Supporting code for parsing AWS config values set in a user's environment or
   52     52   
/// in a shared config file.
   53     53   
pub mod env_config;

tmp-codegen-diff/aws-sdk/sdk/aws-runtime/src/sdk_feature.rs

@@ -1,0 +18,0 @@
    1         -
/*
    2         -
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
    3         -
 * SPDX-License-Identifier: Apache-2.0
    4         -
 */
    5         -
    6         -
use aws_smithy_types::config_bag::{Storable, StoreAppend};
    7         -
    8         -
/// IDs for the features that may be used in the AWS SDK
    9         -
#[non_exhaustive]
   10         -
#[derive(Clone, Debug, Eq, PartialEq)]
   11         -
pub enum AwsSdkFeature {
   12         -
    /// Indicates that an operation was called by the S3 Transfer Manager
   13         -
    S3Transfer,
   14         -
}
   15         -
   16         -
impl Storable for AwsSdkFeature {
   17         -
    type Storer = StoreAppend<Self>;
   18         -
}

tmp-codegen-diff/aws-sdk/sdk/aws-runtime/src/user_agent/metrics.rs

@@ -109,109 +221,278 @@
  129    129   
    Sigv4aSigning,
  130    130   
    ResolvedAccountId,
  131    131   
    FlexibleChecksumsReqCrc32,
  132    132   
    FlexibleChecksumsReqCrc32c,
  133    133   
    FlexibleChecksumsReqCrc64,
  134    134   
    FlexibleChecksumsReqSha1,
  135    135   
    FlexibleChecksumsReqSha256,
  136    136   
    FlexibleChecksumsReqWhenSupported,
  137    137   
    FlexibleChecksumsReqWhenRequired,
  138    138   
    FlexibleChecksumsResWhenSupported,
  139         -
    FlexibleChecksumsResWhenRequired
         139  +
    FlexibleChecksumsResWhenRequired,
         140  +
    DdbMapper,
         141  +
    CredentialsCode,
         142  +
    CredentialsJvmSystemProperties,
         143  +
    CredentialsEnvVars,
         144  +
    CredentialsEnvVarsStsWebIdToken,
         145  +
    CredentialsStsAssumeRole,
         146  +
    CredentialsStsAssumeRoleSaml,
         147  +
    CredentialsStsAssumeRoleWebId,
         148  +
    CredentialsStsFederationToken,
         149  +
    CredentialsStsSessionToken,
         150  +
    CredentialsProfile,
         151  +
    CredentialsProfileSourceProfile,
         152  +
    CredentialsProfileNamedProvider,
         153  +
    CredentialsProfileStsWebIdToken,
         154  +
    CredentialsProfileSso,
         155  +
    CredentialsSso,
         156  +
    CredentialsProfileSsoLegacy,
         157  +
    CredentialsSsoLegacy,
         158  +
    CredentialsProfileProcess,
         159  +
    CredentialsProcess,
         160  +
    CredentialsBoto2ConfigFile,
         161  +
    CredentialsAwsSdkStore,
         162  +
    CredentialsHttp,
         163  +
    CredentialsImds
  140    164   
);
  141    165   
  142    166   
pub(crate) trait ProvideBusinessMetric {
  143    167   
    fn provide_business_metric(&self) -> Option<BusinessMetric>;
  144    168   
}
  145    169   
  146    170   
impl ProvideBusinessMetric for SmithySdkFeature {
  147    171   
    fn provide_business_metric(&self) -> Option<BusinessMetric> {
  148    172   
        use SmithySdkFeature::*;
  149    173   
        match self {
  150    174   
            Waiter => Some(BusinessMetric::Waiter),
  151    175   
            Paginator => Some(BusinessMetric::Paginator),
  152    176   
            GzipRequestCompression => Some(BusinessMetric::GzipRequestCompression),
  153    177   
            ProtocolRpcV2Cbor => Some(BusinessMetric::ProtocolRpcV2Cbor),
  154    178   
            RetryModeStandard => Some(BusinessMetric::RetryModeStandard),
  155    179   
            RetryModeAdaptive => Some(BusinessMetric::RetryModeAdaptive),
  156    180   
            FlexibleChecksumsReqCrc32 => Some(BusinessMetric::FlexibleChecksumsReqCrc32),
  157    181   
            FlexibleChecksumsReqCrc32c => Some(BusinessMetric::FlexibleChecksumsReqCrc32c),
  158    182   
            FlexibleChecksumsReqCrc64 => Some(BusinessMetric::FlexibleChecksumsReqCrc64),
  159    183   
            FlexibleChecksumsReqSha1 => Some(BusinessMetric::FlexibleChecksumsReqSha1),
  160    184   
            FlexibleChecksumsReqSha256 => Some(BusinessMetric::FlexibleChecksumsReqSha256),
  161    185   
            FlexibleChecksumsReqWhenSupported => {
  162    186   
                Some(BusinessMetric::FlexibleChecksumsReqWhenSupported)
  163    187   
            }
  164    188   
            FlexibleChecksumsReqWhenRequired => {
  165    189   
                Some(BusinessMetric::FlexibleChecksumsReqWhenRequired)
  166    190   
            }
  167    191   
            FlexibleChecksumsResWhenSupported => {
  168    192   
                Some(BusinessMetric::FlexibleChecksumsResWhenSupported)
  169    193   
            }
  170    194   
            FlexibleChecksumsResWhenRequired => {
  171    195   
                Some(BusinessMetric::FlexibleChecksumsResWhenRequired)
  172    196   
            }
  173    197   
            otherwise => {
  174    198   
                // This may occur if a customer upgrades only the `aws-smithy-runtime-api` crate
  175    199   
                // while continuing to use an outdated version of an SDK crate or the `aws-runtime`
  176    200   
                // crate.
  177    201   
                tracing::warn!(
  178    202   
                    "Attempted to provide `BusinessMetric` for `{otherwise:?}`, which is not recognized in the current version of the `aws-runtime` crate. \
  179    203   
                    Consider upgrading to the latest version to ensure that all tracked features are properly reported in your metrics."
  180    204   
                );
  181    205   
                None
  182    206   
            }
  183    207   
        }
  184    208   
    }
  185    209   
}
  186    210   
  187    211   
impl ProvideBusinessMetric for AwsSdkFeature {
  188    212   
    fn provide_business_metric(&self) -> Option<BusinessMetric> {
  189    213   
        use AwsSdkFeature::*;
  190    214   
        match self {
  191    215   
            S3Transfer => Some(BusinessMetric::S3Transfer),
         216  +
            CredentialsCode => Some(BusinessMetric::CredentialsCode),
         217  +
            CredentialsEnvVars => Some(BusinessMetric::CredentialsEnvVars),
         218  +
            CredentialsEnvVarsStsWebIdToken => {
         219  +
                Some(BusinessMetric::CredentialsEnvVarsStsWebIdToken)
         220  +
            }
         221  +
            CredentialsStsAssumeRole => Some(BusinessMetric::CredentialsStsAssumeRole),
         222  +
            CredentialsStsAssumeRoleSaml => Some(BusinessMetric::CredentialsStsAssumeRoleSaml),
         223  +
            CredentialsStsAssumeRoleWebId => Some(BusinessMetric::CredentialsStsAssumeRoleWebId),
         224  +
            CredentialsStsFederationToken => Some(BusinessMetric::CredentialsStsFederationToken),
         225  +
            CredentialsStsSessionToken => Some(BusinessMetric::CredentialsStsSessionToken),
         226  +
            CredentialsProfile => Some(BusinessMetric::CredentialsProfile),
         227  +
            CredentialsProfileSourceProfile => {
         228  +
                Some(BusinessMetric::CredentialsProfileSourceProfile)
         229  +
            }
         230  +
            CredentialsProfileNamedProvider => {
         231  +
                Some(BusinessMetric::CredentialsProfileNamedProvider)
         232  +
            }
         233  +
            CredentialsProfileStsWebIdToken => {
         234  +
                Some(BusinessMetric::CredentialsProfileStsWebIdToken)
         235  +
            }
         236  +
            CredentialsProfileSso => Some(BusinessMetric::CredentialsProfileSso),
         237  +
            CredentialsSso => Some(BusinessMetric::CredentialsSso),
         238  +
            CredentialsProfileProcess => Some(BusinessMetric::CredentialsProfileProcess),
         239  +
            CredentialsProcess => Some(BusinessMetric::CredentialsProcess),
         240  +
            CredentialsHttp => Some(BusinessMetric::CredentialsHttp),
         241  +
            CredentialsImds => Some(BusinessMetric::CredentialsImds),
         242  +
            otherwise => {
         243  +
                tracing::warn!(
         244  +
                    "Attempted to provide `BusinessMetric` for `{otherwise:?}`, which is not recognized in the current version of the `aws-runtime` crate. \
         245  +
                    Consider upgrading to the latest version to ensure that all tracked features are properly reported in your metrics."
         246  +
                );
         247  +
                None
         248  +
            }
  192    249   
        }
  193    250   
    }
  194    251   
}
  195    252   
  196    253   
#[derive(Clone, Debug, Default)]
  197    254   
pub(super) struct BusinessMetrics(Vec<BusinessMetric>);
  198    255   
  199    256   
impl BusinessMetrics {
  200    257   
    pub(super) fn push(&mut self, metric: BusinessMetric) {
  201    258   
        self.0.push(metric);
@@ -270,327 +330,412 @@
  290    347   
  "SIGV4A_SIGNING": "S",
  291    348   
  "RESOLVED_ACCOUNT_ID": "T",
  292    349   
  "FLEXIBLE_CHECKSUMS_REQ_CRC32" : "U",
  293    350   
  "FLEXIBLE_CHECKSUMS_REQ_CRC32C" : "V",
  294    351   
  "FLEXIBLE_CHECKSUMS_REQ_CRC64" : "W",
  295    352   
  "FLEXIBLE_CHECKSUMS_REQ_SHA1" : "X",
  296    353   
  "FLEXIBLE_CHECKSUMS_REQ_SHA256" : "Y",
  297    354   
  "FLEXIBLE_CHECKSUMS_REQ_WHEN_SUPPORTED" : "Z",
  298    355   
  "FLEXIBLE_CHECKSUMS_REQ_WHEN_REQUIRED" : "a",
  299    356   
  "FLEXIBLE_CHECKSUMS_RES_WHEN_SUPPORTED" : "b",
  300         -
  "FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED" : "c"
         357  +
  "FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED" : "c",
         358  +
  "DDB_MAPPER" : "d",
         359  +
  "CREDENTIALS_CODE" : "e",
         360  +
  "CREDENTIALS_JVM_SYSTEM_PROPERTIES" : "f",
         361  +
  "CREDENTIALS_ENV_VARS" : "g",
         362  +
  "CREDENTIALS_ENV_VARS_STS_WEB_ID_TOKEN" : "h",
         363  +
  "CREDENTIALS_STS_ASSUME_ROLE" : "i",
         364  +
  "CREDENTIALS_STS_ASSUME_ROLE_SAML" : "j",
         365  +
  "CREDENTIALS_STS_ASSUME_ROLE_WEB_ID" : "k",
         366  +
  "CREDENTIALS_STS_FEDERATION_TOKEN" : "l",
         367  +
  "CREDENTIALS_STS_SESSION_TOKEN" : "m",
         368  +
  "CREDENTIALS_PROFILE" : "n",
         369  +
  "CREDENTIALS_PROFILE_SOURCE_PROFILE" : "o",
         370  +
  "CREDENTIALS_PROFILE_NAMED_PROVIDER" : "p",
         371  +
  "CREDENTIALS_PROFILE_STS_WEB_ID_TOKEN" : "q",
         372  +
  "CREDENTIALS_PROFILE_SSO" : "r",
         373  +
  "CREDENTIALS_SSO" : "s",
         374  +
  "CREDENTIALS_PROFILE_SSO_LEGACY" : "t",
         375  +
  "CREDENTIALS_SSO_LEGACY" : "u",
         376  +
  "CREDENTIALS_PROFILE_PROCESS" : "v",
         377  +
  "CREDENTIALS_PROCESS" : "w",
         378  +
  "CREDENTIALS_BOTO2_CONFIG_FILE" : "x",
         379  +
  "CREDENTIALS_AWS_SDK_STORE" : "y",
         380  +
  "CREDENTIALS_HTTP" : "z",
         381  +
  "CREDENTIALS_IMDS" : "0"
         382  +
  301    383   
}
  302    384   
        "#;
  303    385   
  304    386   
        let expected: HashMap<&str, &str> = serde_json::from_str(EXPECTED).unwrap();
  305    387   
        assert_eq!(expected.len(), FEATURE_ID_TO_METRIC_VALUE.len());
  306    388   
  307    389   
        for (feature_id, metric_value) in &*FEATURE_ID_TO_METRIC_VALUE {
  308    390   
            let expected = expected.get(format!("{feature_id}").as_str());
  309    391   
            assert_eq!(
  310    392   
                expected.unwrap_or_else(|| panic!("Expected {feature_id} to have value `{metric_value}` but it was `{expected:?}` instead.")),

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

@@ -17,17 +77,77 @@
   37     37   
[dependencies]
   38     38   
bytes = "1.10.0"
   39     39   
hex = "0.4.3"
   40     40   
hmac = "0.12"
   41     41   
sha2 = "0.10"
   42     42   
time = "0.3.5"
   43     43   
tracing = "0.1.40"
   44     44   
   45     45   
[dependencies.aws-credential-types]
   46     46   
path = "../aws-credential-types"
   47         -
version = "1.2.4"
          47  +
version = "1.2.5"
   48     48   
   49     49   
[dependencies.aws-smithy-eventstream]
   50     50   
path = "../aws-smithy-eventstream"
   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   
@@ -89,89 +130,130 @@
  109    109   
pretty_assertions = "1.3"
  110    110   
proptest = "1.2"
  111    111   
serde = "1.0.180"
  112    112   
serde_derive = "1.0.180"
  113    113   
serde_json = "1.0.104"
  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         -
version = "1.2.4"
         119  +
version = "1.2.5"
  120    120   
  121    121   
[dev-dependencies.aws-smithy-runtime-api]
  122    122   
path = "../aws-smithy-runtime-api"
  123    123   
features = ["client", "test-util"]
  124    124   
version = "1.8.4"
  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]

tmp-codegen-diff/aws-sdk/sdk/aws-smithy-checksums/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-checksums"
    4         -
version = "0.63.5"
           4  +
version = "0.63.6"
    5      5   
authors = ["AWS Rust SDK Team <aws-sdk-rust@amazon.com>", "Zelda Hessler <zhessler@amazon.com>"]
    6      6   
description = "Checksum calculation and verification callbacks"
    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"]