Copy disabled (too large)
Download .txt
Showing preview only (42,518K chars total). Download the full file to get everything.
Repository: awslabs/smithy-rs
Branch: main
Commit: d6f56800899c
Files: 3358
Total size: 39.7 MB
Directory structure:
gitextract_ciwtcwjx/
├── .cargo/
│ └── config.toml
├── .cargo-deny-config.toml
├── .changelog/
│ └── .example
├── .editorconfig
├── .git-blame-ignore-revs
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── blank_issue.md
│ │ └── config.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── actions/
│ │ ├── docker-build/
│ │ │ └── action.yml
│ │ ├── download-all-artifacts/
│ │ │ └── action.yml
│ │ └── free-disk-space/
│ │ └── action.yml
│ ├── scripts/
│ │ ├── README.md
│ │ ├── acquire-build-image
│ │ ├── docker-image-hash
│ │ ├── get-or-create-release-branch.sh
│ │ └── upload-build-image.sh
│ └── workflows/
│ ├── backport-pull-request.yml
│ ├── ci-main.yml
│ ├── ci-pr-forks.yml
│ ├── ci-pr.yml
│ ├── ci-tls.yml
│ ├── ci.yml
│ ├── claim-crate-names.yml
│ ├── credentials-verification.yml
│ ├── dry-run-release-scheduled.yml
│ ├── dry-run-release.yml
│ ├── github-pages.yml
│ ├── manual-canary.yml
│ ├── manual-pull-request-bot.yml
│ ├── manual-update-lockfiles.yml
│ ├── prod-release.yml
│ ├── pull-request-bot.yml
│ ├── pull-request-updating-lockfiles.yml
│ ├── release-scripts/
│ │ └── create-release.js
│ ├── release.yml
│ ├── update-lockfiles.yml
│ └── update-sdk-next.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .pre-commit-hooks/
│ ├── kotlin-block-quotes.py
│ ├── ktlint.sh
│ ├── runtime-versioner.sh
│ └── sdk-lints.sh
├── AGENTS.md
├── CHANGELOG.md
├── CODEOWNERS
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── NOTICE
├── README.md
├── aws/
│ ├── SDK_CHANGELOG.next.json
│ ├── SDK_README.md.hb
│ ├── codegen-aws-sdk/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── main/
│ │ │ ├── kotlin/
│ │ │ │ └── software/
│ │ │ │ └── amazon/
│ │ │ │ └── smithy/
│ │ │ │ └── rustsdk/
│ │ │ │ ├── AccountIdEndpointParamsDecorator.kt
│ │ │ │ ├── AwsCargoDependency.kt
│ │ │ │ ├── AwsChunkedContentEncodingDecorator.kt
│ │ │ │ ├── AwsCodegenDecorator.kt
│ │ │ │ ├── AwsCrateDocsDecorator.kt
│ │ │ │ ├── AwsDocs.kt
│ │ │ │ ├── AwsFluentClientDecorator.kt
│ │ │ │ ├── AwsPresigningDecorator.kt
│ │ │ │ ├── AwsRequestIdDecorator.kt
│ │ │ │ ├── AwsRuntimeType.kt
│ │ │ │ ├── BaseRequestIdDecorator.kt
│ │ │ │ ├── CrateLicenseDecorator.kt
│ │ │ │ ├── CredentialProvidersDecorator.kt
│ │ │ │ ├── DisablePayloadSigningDecorator.kt
│ │ │ │ ├── EndpointBasedAuthSchemeDecorator.kt
│ │ │ │ ├── EndpointBuiltInsDecorator.kt
│ │ │ │ ├── EndpointOverrideMetricDecorator.kt
│ │ │ │ ├── HttpRequestChecksumDecorator.kt
│ │ │ │ ├── HttpRequestCompressionDecorator.kt
│ │ │ │ ├── HttpResponseChecksumDecorator.kt
│ │ │ │ ├── InlineAwsDependency.kt
│ │ │ │ ├── IntegrationTestDependencies.kt
│ │ │ │ ├── InvocationIdDecorator.kt
│ │ │ │ ├── ObservabilityMetricDecorator.kt
│ │ │ │ ├── RecursionDetectionDecorator.kt
│ │ │ │ ├── RegionDecorator.kt
│ │ │ │ ├── RetryClassifierDecorator.kt
│ │ │ │ ├── RetryInformationHeaderDecorator.kt
│ │ │ │ ├── SdkConfigDecorator.kt
│ │ │ │ ├── SdkSettings.kt
│ │ │ │ ├── ServiceConfigDecorator.kt
│ │ │ │ ├── ServiceEnvConfigDecorator.kt
│ │ │ │ ├── SigV4AuthDecorator.kt
│ │ │ │ ├── SmokeTestsDecorator.kt
│ │ │ │ ├── SpanDecorator.kt
│ │ │ │ ├── TokenProvidersDecorator.kt
│ │ │ │ ├── UserAgentDecorator.kt
│ │ │ │ ├── customize/
│ │ │ │ │ ├── AwsDisableStalledStreamProtection.kt
│ │ │ │ │ ├── DisabledAuthDecorator.kt
│ │ │ │ │ ├── EnvironmentTokenProviderDecorator.kt
│ │ │ │ │ ├── IsTruncatedPaginatorDecorator.kt
│ │ │ │ │ ├── RemoveDefaults.kt
│ │ │ │ │ ├── RemoveDefaultsDecorator.kt
│ │ │ │ │ ├── ServiceSpecificDecorator.kt
│ │ │ │ │ ├── Sigv4aAuthTraitBackfillDecorator.kt
│ │ │ │ │ ├── apigateway/
│ │ │ │ │ │ └── ApiGatewayDecorator.kt
│ │ │ │ │ ├── dsql/
│ │ │ │ │ │ └── DsqlDecorator.kt
│ │ │ │ │ ├── ec2/
│ │ │ │ │ │ ├── BoxPrimitiveShapes.kt
│ │ │ │ │ │ ├── EC2MakePrimitivesOptional.kt
│ │ │ │ │ │ └── Ec2Decorator.kt
│ │ │ │ │ ├── glacier/
│ │ │ │ │ │ └── GlacierDecorator.kt
│ │ │ │ │ ├── rds/
│ │ │ │ │ │ └── RdsDecorator.kt
│ │ │ │ │ ├── route53/
│ │ │ │ │ │ ├── Route53Decorator.kt
│ │ │ │ │ │ └── TrimResourceId.kt
│ │ │ │ │ ├── s3/
│ │ │ │ │ │ ├── MakeS3BoolsAndNumbersOptional.kt
│ │ │ │ │ │ ├── S3Decorator.kt
│ │ │ │ │ │ ├── S3ExpiresDecorator.kt
│ │ │ │ │ │ ├── S3ExpressDecorator.kt
│ │ │ │ │ │ ├── S3ExtendedRequestIdDecorator.kt
│ │ │ │ │ │ └── StripBucketFromPath.kt
│ │ │ │ │ ├── s3control/
│ │ │ │ │ │ └── S3ControlDecorator.kt
│ │ │ │ │ ├── sso/
│ │ │ │ │ │ └── SSODecorator.kt
│ │ │ │ │ ├── sts/
│ │ │ │ │ │ └── STSDecorator.kt
│ │ │ │ │ └── timestream/
│ │ │ │ │ └── TimestreamDecorator.kt
│ │ │ │ ├── endpoints/
│ │ │ │ │ ├── AwsEndpointsStdLib.kt
│ │ │ │ │ ├── OperationInputTestGenerator.kt
│ │ │ │ │ ├── RequireEndpointRules.kt
│ │ │ │ │ └── StripEndpointTrait.kt
│ │ │ │ └── traits/
│ │ │ │ └── PresignableTrait.kt
│ │ │ └── resources/
│ │ │ ├── LICENSE
│ │ │ ├── META-INF/
│ │ │ │ └── services/
│ │ │ │ └── software.amazon.smithy.rust.codegen.client.smithy.customize.ClientCodegenDecorator
│ │ │ └── default-partitions.json
│ │ └── test/
│ │ └── kotlin/
│ │ ├── AwsCrateDocsDecoratorTest.kt
│ │ ├── SdkCodegenIntegrationTest.kt
│ │ └── software/
│ │ └── amazon/
│ │ └── smithy/
│ │ └── rustsdk/
│ │ ├── AwsPresigningDecoratorTest.kt
│ │ ├── CredentialProviderConfigTest.kt
│ │ ├── EndpointBuiltInsDecoratorTest.kt
│ │ ├── EndpointOverrideMetricDecoratorTest.kt
│ │ ├── EndpointsCredentialsTest.kt
│ │ ├── HttpChecksumTest.kt
│ │ ├── HttpRequestCompressionDecoratorTest.kt
│ │ ├── InvocationIdDecoratorTest.kt
│ │ ├── OperationInputTestGeneratorTests.kt
│ │ ├── RegionDecoratorTest.kt
│ │ ├── RegionProviderConfigTest.kt
│ │ ├── RetryPartitionTest.kt
│ │ ├── SigV4AuthDecoratorTest.kt
│ │ ├── SmokeTestsDecoratorTest.kt
│ │ ├── TestUtil.kt
│ │ ├── TimeoutConfigMergingTest.kt
│ │ ├── TokenProvidersDecoratorTest.kt
│ │ ├── UserAgentDecoratorTest.kt
│ │ └── customize/
│ │ ├── IsTruncatedPaginatorTest.kt
│ │ ├── RemoveDefaultsTest.kt
│ │ ├── ec2/
│ │ │ └── EC2MakePrimitivesOptionalTest.kt
│ │ └── s3/
│ │ └── S3ExpiresDecoratorTest.kt
│ ├── rust-runtime/
│ │ ├── .gitignore
│ │ ├── Cargo.toml
│ │ ├── aws-config/
│ │ │ ├── Cargo.toml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── clippy.toml
│ │ │ ├── examples/
│ │ │ │ └── imds.rs
│ │ │ ├── external-types.toml
│ │ │ ├── fuzz/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── fuzz_targets/
│ │ │ │ └── profile-parser.rs
│ │ │ ├── integration-tests/
│ │ │ │ └── eks-credentials/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .npmignore
│ │ │ │ ├── README.md
│ │ │ │ ├── bin/
│ │ │ │ │ └── eks-credentials.ts
│ │ │ │ ├── cdk.json
│ │ │ │ ├── jest.config.js
│ │ │ │ ├── lib/
│ │ │ │ │ └── eks-credentials-stack.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── test.rs
│ │ │ │ └── tsconfig.json
│ │ │ ├── src/
│ │ │ │ ├── credential_process.rs
│ │ │ │ ├── default_provider/
│ │ │ │ │ ├── account_id_endpoint_mode.rs
│ │ │ │ │ ├── app_name.rs
│ │ │ │ │ ├── auth_scheme_preference.rs
│ │ │ │ │ ├── checksums.rs
│ │ │ │ │ ├── credentials.rs
│ │ │ │ │ ├── disable_request_compression.rs
│ │ │ │ │ ├── endpoint_url.rs
│ │ │ │ │ ├── ignore_configured_endpoint_urls.rs
│ │ │ │ │ ├── region.rs
│ │ │ │ │ ├── request_min_compression_size_bytes.rs
│ │ │ │ │ ├── retry_config.rs
│ │ │ │ │ ├── sigv4a_signing_region_set.rs
│ │ │ │ │ ├── timeout_config.rs
│ │ │ │ │ ├── token.rs
│ │ │ │ │ ├── use_dual_stack.rs
│ │ │ │ │ └── use_fips.rs
│ │ │ │ ├── default_provider.rs
│ │ │ │ ├── ecs.rs
│ │ │ │ ├── env_service_config.rs
│ │ │ │ ├── environment/
│ │ │ │ │ ├── credentials.rs
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ └── region.rs
│ │ │ │ ├── http_credential_provider.rs
│ │ │ │ ├── imds/
│ │ │ │ │ ├── client/
│ │ │ │ │ │ ├── error.rs
│ │ │ │ │ │ └── token.rs
│ │ │ │ │ ├── client.rs
│ │ │ │ │ ├── credentials.rs
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ └── region.rs
│ │ │ │ ├── json_credentials.rs
│ │ │ │ ├── lib.rs
│ │ │ │ ├── login/
│ │ │ │ │ ├── cache.rs
│ │ │ │ │ ├── dpop.rs
│ │ │ │ │ └── token.rs
│ │ │ │ ├── login.rs
│ │ │ │ ├── meta/
│ │ │ │ │ ├── credentials/
│ │ │ │ │ │ ├── chain.rs
│ │ │ │ │ │ └── mod.rs
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ ├── region.rs
│ │ │ │ │ └── token.rs
│ │ │ │ ├── profile/
│ │ │ │ │ ├── credentials/
│ │ │ │ │ │ ├── exec.rs
│ │ │ │ │ │ └── repr.rs
│ │ │ │ │ ├── credentials.rs
│ │ │ │ │ ├── location_of_profile_files.md
│ │ │ │ │ ├── parser.rs
│ │ │ │ │ ├── profile_file.rs
│ │ │ │ │ ├── region.rs
│ │ │ │ │ └── token.rs
│ │ │ │ ├── profile.rs
│ │ │ │ ├── provider_config.rs
│ │ │ │ ├── retry.rs
│ │ │ │ ├── sensitive_command.rs
│ │ │ │ ├── sso/
│ │ │ │ │ ├── cache.rs
│ │ │ │ │ ├── credentials.rs
│ │ │ │ │ └── token.rs
│ │ │ │ ├── sso.rs
│ │ │ │ ├── stalled_stream_protection.rs
│ │ │ │ ├── sts/
│ │ │ │ │ ├── assume_role.rs
│ │ │ │ │ └── util.rs
│ │ │ │ ├── sts.rs
│ │ │ │ ├── test_case.rs
│ │ │ │ ├── timeout.rs
│ │ │ │ └── web_identity_token.rs
│ │ │ └── test-data/
│ │ │ ├── assume-role-tests.json
│ │ │ ├── default-credential-provider-chain/
│ │ │ │ ├── e2e_fips_and_dual_stack_sso/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── sso/
│ │ │ │ │ │ └── cache/
│ │ │ │ │ │ └── dace00cba5f8355ec9d274ceb2bcebdfbeed0e12.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── ecs_assume_role/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── ecs_credentials/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── ecs_credentials_invalid_profile/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── eks_pod_identity_credentials/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── token.jwt
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── eks_pod_identity_no_token_file/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── environment_variables/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── environment_variables_blank/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── imds_assume_role/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── imds_config_with_no_creds/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── imds_default_chain_error/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── imds_default_chain_retries/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── imds_default_chain_success/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── imds_disabled/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── imds_no_iam_role/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── imds_token_fail/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── prefer_environment/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── credentials
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── profile_name/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── profile_overrides_web_identity/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ ├── home/
│ │ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ │ └── config
│ │ │ │ │ │ └── token.jwt
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── profile_static_keys/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── credentials
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── profile_static_keys_case_insensitive/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── credentials
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── sso_assume_role/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── sso/
│ │ │ │ │ │ └── cache/
│ │ │ │ │ │ └── dace00cba5f8355ec9d274ceb2bcebdfbeed0e12.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── sso_no_token_file/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── sso/
│ │ │ │ │ │ └── cache/
│ │ │ │ │ │ └── differenthashthatdoesntmatch.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── sso_server_error/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── sso/
│ │ │ │ │ │ └── cache/
│ │ │ │ │ │ └── dace00cba5f8355ec9d274ceb2bcebdfbeed0e12.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── web_identity_source_profile_no_env/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ ├── home/
│ │ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ │ └── config
│ │ │ │ │ │ └── token.jwt
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── web_identity_token_env/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── token.jwt
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── web_identity_token_invalid_jwt/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ ├── home/
│ │ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ │ └── config
│ │ │ │ │ │ └── token.jwt
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── web_identity_token_profile/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ ├── home/
│ │ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ │ └── config
│ │ │ │ │ │ └── token.jwt
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ └── web_identity_token_source_profile/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ ├── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ └── token.jwt
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── default-token-provider-chain/
│ │ │ │ ├── profile_keys/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── sso/
│ │ │ │ │ │ └── cache/
│ │ │ │ │ │ └── d12208e38164f558a1d06c99432ab77dbb346c45.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── profile_keys_case_insensitive/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── sso/
│ │ │ │ │ │ └── cache/
│ │ │ │ │ │ └── d12208e38164f558a1d06c99432ab77dbb346c45.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ └── profile_name/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── sso/
│ │ │ │ │ └── cache/
│ │ │ │ │ └── 29faa2f70ab0f58f60e284d585d95865572f5cbd.json
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── ecs-tests.json
│ │ │ ├── imds-config/
│ │ │ │ └── imds-endpoint-tests.json
│ │ │ ├── login-provider-test-cases.json
│ │ │ └── profile-provider/
│ │ │ ├── assume_role_override_global_env_url/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── assume_role_override_global_profile_url/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── assume_role_override_service_env_url/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── assume_role_override_service_profile_url/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── credential_process/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── credential_process_account_id_fallback/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── credential_process_failure/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── credential_process_invalid/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── e2e_assume_role/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── e2e_fips_and_dual_stack_sts/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── empty_config/
│ │ │ │ ├── env.json
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── invalid_config/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ └── config
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── invalid_sso_credentials_config/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ └── config
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── region_override/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── retry_on_error/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── sso_credentials/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ ├── credentials
│ │ │ │ │ └── sso/
│ │ │ │ │ └── cache/
│ │ │ │ │ └── 34c6fceca75e456f25e7e99531e2425c6c1de443.json
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── sso_override_global_env_url/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ ├── credentials
│ │ │ │ │ └── sso/
│ │ │ │ │ └── cache/
│ │ │ │ │ └── 34c6fceca75e456f25e7e99531e2425c6c1de443.json
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ └── sso_token/
│ │ │ ├── env.json
│ │ │ ├── fs/
│ │ │ │ ├── env.json
│ │ │ │ ├── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ ├── credentials
│ │ │ │ │ └── sso/
│ │ │ │ │ └── cache/
│ │ │ │ │ └── 34c6fceca75e456f25e7e99531e2425c6c1de443.json
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── http-traffic.json
│ │ │ └── test-case.json
│ │ ├── aws-credential-types/
│ │ │ ├── Cargo.toml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── additional-ci
│ │ │ ├── external-types.toml
│ │ │ └── src/
│ │ │ ├── attributes.rs
│ │ │ ├── credential_feature.rs
│ │ │ ├── credential_fn.rs
│ │ │ ├── credentials_impl.rs
│ │ │ ├── lib.rs
│ │ │ ├── provider/
│ │ │ │ ├── credentials.rs
│ │ │ │ ├── error.rs
│ │ │ │ ├── future.rs
│ │ │ │ └── token.rs
│ │ │ ├── provider.rs
│ │ │ └── token_fn.rs
│ │ ├── aws-inlineable/
│ │ │ ├── Cargo.toml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── external-types.toml
│ │ │ └── src/
│ │ │ ├── account_id_endpoint.rs
│ │ │ ├── apigateway_interceptors.rs
│ │ │ ├── aws_chunked.rs
│ │ │ ├── dsql_auth_token.rs
│ │ │ ├── endpoint_auth.rs
│ │ │ ├── endpoint_discovery.rs
│ │ │ ├── glacier_interceptors.rs
│ │ │ ├── http_request_checksum.rs
│ │ │ ├── http_response_checksum.rs
│ │ │ ├── lib.rs
│ │ │ ├── observability_feature.rs
│ │ │ ├── presigning.rs
│ │ │ ├── presigning_interceptors.rs
│ │ │ ├── rds_auth_token.rs
│ │ │ ├── route53_resource_id_preprocessor.rs
│ │ │ ├── s3_expires_interceptor.rs
│ │ │ ├── s3_express.rs
│ │ │ ├── s3_request_id.rs
│ │ │ └── serialization_settings.rs
│ │ ├── aws-runtime/
│ │ │ ├── Cargo.toml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── additional-ci
│ │ │ ├── external-types.toml
│ │ │ ├── src/
│ │ │ │ ├── auth/
│ │ │ │ │ ├── sigv4.rs
│ │ │ │ │ └── sigv4a.rs
│ │ │ │ ├── auth.rs
│ │ │ │ ├── content_encoding/
│ │ │ │ │ ├── body/
│ │ │ │ │ │ ├── http_body_0_x.rs
│ │ │ │ │ │ └── http_body_1_x.rs
│ │ │ │ │ ├── body.rs
│ │ │ │ │ ├── options.rs
│ │ │ │ │ └── sign.rs
│ │ │ │ ├── content_encoding.rs
│ │ │ │ ├── env_config/
│ │ │ │ │ ├── error.rs
│ │ │ │ │ ├── file.rs
│ │ │ │ │ ├── normalize.rs
│ │ │ │ │ ├── parse.rs
│ │ │ │ │ ├── property.rs
│ │ │ │ │ ├── section.rs
│ │ │ │ │ └── source.rs
│ │ │ │ ├── env_config.rs
│ │ │ │ ├── fs_util.rs
│ │ │ │ ├── invocation_id.rs
│ │ │ │ ├── lib.rs
│ │ │ │ ├── recursion_detection.rs
│ │ │ │ ├── request_info.rs
│ │ │ │ ├── retries/
│ │ │ │ │ └── classifiers.rs
│ │ │ │ ├── retries.rs
│ │ │ │ ├── sdk_feature.rs
│ │ │ │ ├── service_clock_skew.rs
│ │ │ │ ├── user_agent/
│ │ │ │ │ ├── interceptor.rs
│ │ │ │ │ ├── metrics.rs
│ │ │ │ │ ├── test_data/
│ │ │ │ │ │ └── feature_id_to_metric_value.json
│ │ │ │ │ └── test_util.rs
│ │ │ │ └── user_agent.rs
│ │ │ └── test-data/
│ │ │ ├── file-location-tests.json
│ │ │ ├── profile-parser-tests.json
│ │ │ └── recursion-detection.json
│ │ ├── aws-runtime-api/
│ │ │ ├── Cargo.toml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── external-types.toml
│ │ │ └── src/
│ │ │ └── lib.rs
│ │ ├── aws-sigv4/
│ │ │ ├── Cargo.toml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── aws-signing-test-suite/
│ │ │ │ ├── README.md
│ │ │ │ ├── v4/
│ │ │ │ │ ├── double-encode-path/
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── double-url-encode/
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-header-key-duplicate/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-header-value-multiline/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-header-value-order/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-header-value-trim/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-relative-normalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-relative-relative-normalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-relative-relative-unnormalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-relative-unnormalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-slash-dot-slash-normalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-slash-dot-slash-unnormalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-slash-normalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-slash-pointless-dot-normalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-slash-pointless-dot-unnormalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-slash-unnormalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-slashes-normalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-slashes-unnormalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-space-normalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-space-unnormalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-unreserved/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-utf8/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-vanilla/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-vanilla-empty-query-key/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-vanilla-query/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-vanilla-query-order-encoded/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-vanilla-query-order-key-case/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-vanilla-query-unreserved/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-vanilla-utf8-query/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-vanilla-with-session-token/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-header-key-case/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-header-key-sort/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-header-value-case/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-sts-header-after/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-sts-header-before/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-vanilla/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-vanilla-empty-query-value/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-vanilla-query/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-x-www-form-urlencoded/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ └── post-x-www-form-urlencoded-parameters/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ └── v4a/
│ │ │ │ ├── get-header-key-duplicate/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-header-value-multiline/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-header-value-order/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-header-value-trim/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-relative-normalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-relative-relative-normalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-relative-relative-unnormalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-relative-unnormalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-slash-dot-slash-normalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-slash-dot-slash-unnormalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-slash-normalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-slash-pointless-dot-normalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-slash-pointless-dot-unnormalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-slash-unnormalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-slashes-normalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-slashes-unnormalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-space-normalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-space-unnormalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-unreserved/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-utf8/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-vanilla/
│ │ │ │ │ ├── canonical-request.txt
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ ├── request.txt
│ │ │ │ │ └── string-to-sign.txt
│ │ │ │ ├── get-vanilla-empty-query-key/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-vanilla-query/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-vanilla-query-order-encoded/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-vanilla-query-order-key-case/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-vanilla-query-unreserved/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-vanilla-utf8-query/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-vanilla-with-session-token/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-header-key-case/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-header-key-sort/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-header-value-case/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-sts-header-after/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-sts-header-before/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-vanilla/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-vanilla-empty-query-value/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-vanilla-query/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-x-www-form-urlencoded/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ └── post-x-www-form-urlencoded-parameters/
│ │ │ │ ├── context.json
│ │ │ │ ├── header-canonical-request.txt
│ │ │ │ ├── header-signature.txt
│ │ │ │ ├── header-signed-request.txt
│ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ ├── public-key.json
│ │ │ │ ├── query-canonical-request.txt
│ │ │ │ ├── query-signature.txt
│ │ │ │ ├── query-signed-request.txt
│ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ └── request.txt
│ │ │ ├── benches/
│ │ │ │ ├── hmac.rs
│ │ │ │ └── sigv4a.rs
│ │ │ ├── external-types.toml
│ │ │ └── src/
│ │ │ ├── date_time.rs
│ │ │ ├── event_stream.rs
│ │ │ ├── http_request/
│ │ │ │ ├── canonical_request/
│ │ │ │ │ └── sigv4a.rs
│ │ │ │ ├── canonical_request.rs
│ │ │ │ ├── error.rs
│ │ │ │ ├── settings.rs
│ │ │ │ ├── sign.rs
│ │ │ │ ├── test.rs
│ │ │ │ ├── uri_path_normalization.rs
│ │ │ │ └── url_escape.rs
│ │ │ ├── http_request.rs
│ │ │ ├── lib.rs
│ │ │ ├── sign/
│ │ │ │ ├── v4.rs
│ │ │ │ └── v4a.rs
│ │ │ └── sign.rs
│ │ ├── aws-types/
│ │ │ ├── Cargo.toml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── additional-ci
│ │ │ ├── build.rs
│ │ │ ├── external-types.toml
│ │ │ └── src/
│ │ │ ├── app_name.rs
│ │ │ ├── build_metadata.rs
│ │ │ ├── endpoint_config.rs
│ │ │ ├── lib.rs
│ │ │ ├── origin.rs
│ │ │ ├── os_shim_internal.rs
│ │ │ ├── region.rs
│ │ │ ├── request_id.rs
│ │ │ ├── sdk_config.rs
│ │ │ └── service_config.rs
│ │ ├── build.gradle.kts
│ │ └── clippy.toml
│ ├── sdk/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── aws-models/
│ │ │ ├── README.md
│ │ │ ├── bedrock-runtime.json
│ │ │ ├── cloudwatch-logs.json
│ │ │ ├── codecatalyst.json
│ │ │ ├── config-service.json
│ │ │ ├── dynamodb.json
│ │ │ ├── ec2.json
│ │ │ ├── ecs.json
│ │ │ ├── glacier.json
│ │ │ ├── iam.json
│ │ │ ├── kms.json
│ │ │ ├── lambda.json
│ │ │ ├── polly.json
│ │ │ ├── route-53.json
│ │ │ ├── s3-control.json
│ │ │ ├── s3.json
│ │ │ ├── sdk-default-configuration.json
│ │ │ ├── sdk-endpoints.json
│ │ │ ├── sdk-partitions.json
│ │ │ ├── signin.json
│ │ │ ├── sso-oidc.json
│ │ │ ├── sso.json
│ │ │ ├── sts.json
│ │ │ ├── timestream-query.json
│ │ │ ├── timestream-write.json
│ │ │ └── transcribe-streaming.json
│ │ ├── aws-models-extra/
│ │ │ ├── README.md
│ │ │ ├── batch-tests.smithy
│ │ │ ├── ebs-tests.smithy
│ │ │ ├── glacier-tests.smithy
│ │ │ ├── route53-tests.smithy
│ │ │ ├── s3-tests.smithy
│ │ │ └── sqs-tests.smithy
│ │ ├── benchmarks/
│ │ │ ├── previous-release-comparison/
│ │ │ │ ├── Cargo.toml
│ │ │ │ ├── README.md
│ │ │ │ └── benches/
│ │ │ │ └── previous_release_comparison.rs
│ │ │ ├── s3-express/
│ │ │ │ ├── Cargo.toml
│ │ │ │ ├── README.md
│ │ │ │ ├── benches/
│ │ │ │ │ ├── concurrent_put_get.rs
│ │ │ │ │ ├── get_object.rs
│ │ │ │ │ ├── put_get_delete.rs
│ │ │ │ │ └── put_object.rs
│ │ │ │ └── src/
│ │ │ │ └── lib.rs
│ │ │ ├── s3-throughput/
│ │ │ │ ├── README.md
│ │ │ │ ├── benchmark/
│ │ │ │ │ ├── Cargo.toml
│ │ │ │ │ └── src/
│ │ │ │ │ ├── get_test.rs
│ │ │ │ │ ├── latencies.rs
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── multipart_get.rs
│ │ │ │ │ ├── multipart_put.rs
│ │ │ │ │ ├── put_test.rs
│ │ │ │ │ └── verify.rs
│ │ │ │ └── infrastructure/
│ │ │ │ ├── .eslintrc.json
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .npmignore
│ │ │ │ ├── .prettierrc
│ │ │ │ ├── assets/
│ │ │ │ │ ├── init_instance.sh
│ │ │ │ │ └── run_benchmark.sh
│ │ │ │ ├── bin/
│ │ │ │ │ └── infrastructure.ts
│ │ │ │ ├── cdk.context.json
│ │ │ │ ├── cdk.json
│ │ │ │ ├── lib/
│ │ │ │ │ └── infrastructure-stack.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── sdk-perf/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── src/
│ │ │ │ ├── ddb_serde.rs
│ │ │ │ ├── main.rs
│ │ │ │ ├── results.rs
│ │ │ │ └── test_util.rs
│ │ │ └── standardized-benches/
│ │ │ ├── Cargo.toml
│ │ │ ├── README.md
│ │ │ ├── e2e-configs/
│ │ │ │ ├── ddb-getitem-1KiB-latency-benchmark.json
│ │ │ │ ├── ddb-putitem-1KiB-latency-benchmark.json
│ │ │ │ ├── s3-download-256KiB-throughput-benchmark.json
│ │ │ │ └── s3-upload-256KiB-throughput-benchmark.json
│ │ │ └── src/
│ │ │ ├── bench_utils.rs
│ │ │ ├── bin/
│ │ │ │ ├── ddb_e2e.rs
│ │ │ │ ├── lambda_endpoint.rs
│ │ │ │ ├── s3_e2e.rs
│ │ │ │ └── s3_endpoint.rs
│ │ │ ├── e2e/
│ │ │ │ ├── benchmark_types.rs
│ │ │ │ ├── ddb.rs
│ │ │ │ └── s3.rs
│ │ │ ├── e2e.rs
│ │ │ ├── endpoint/
│ │ │ │ ├── lambda.rs
│ │ │ │ └── s3.rs
│ │ │ ├── endpoint.rs
│ │ │ └── lib.rs
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── integration-tests/
│ │ │ ├── .gitignore
│ │ │ ├── Cargo.toml
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── bedrockruntime/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ └── environment_token_provider.rs
│ │ │ ├── cloudwatchlogs/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── event_stream.rs
│ │ │ │ └── success.json
│ │ │ ├── codecatalyst/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── sso_bearer_auth.json
│ │ │ │ └── sso_bearer_auth.rs
│ │ │ ├── dynamodb/
│ │ │ │ ├── Cargo.toml
│ │ │ │ ├── benches/
│ │ │ │ │ ├── deserialization_bench.rs
│ │ │ │ │ └── serialization_bench.rs
│ │ │ │ └── tests/
│ │ │ │ ├── account-based-endpoints.rs
│ │ │ │ ├── auth_scheme_error.rs
│ │ │ │ ├── build-errors.rs
│ │ │ │ ├── cloning.rs
│ │ │ │ ├── data.json
│ │ │ │ ├── endpoints.rs
│ │ │ │ ├── movies.rs
│ │ │ │ ├── paginators.rs
│ │ │ │ ├── retries-with-client-rate-limiting.rs
│ │ │ │ ├── shared-config.rs
│ │ │ │ ├── test-error-classification.rs
│ │ │ │ └── timeouts.rs
│ │ │ ├── ec2/
│ │ │ │ ├── Cargo.toml
│ │ │ │ ├── src/
│ │ │ │ │ └── lib.rs
│ │ │ │ └── tests/
│ │ │ │ ├── instance-status-ok-waiter-success.json
│ │ │ │ ├── paginators.rs
│ │ │ │ └── waiters.rs
│ │ │ ├── glacier/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── custom-headers.rs
│ │ │ │ └── test-file.txt
│ │ │ ├── iam/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ └── resolve-global-endpoint.rs
│ │ │ ├── kms/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── integration.rs
│ │ │ │ ├── retryable_errors.rs
│ │ │ │ ├── sensitive-it.rs
│ │ │ │ └── traits.rs
│ │ │ ├── lambda/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── blns/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ └── blns.txt
│ │ │ │ ├── naughty-strings-client-context.rs
│ │ │ │ └── request_id.rs
│ │ │ ├── no-default-features/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ └── client-construction.rs
│ │ │ ├── polly/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ └── presigning.rs
│ │ │ ├── s3/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── alternative-async-runtime.rs
│ │ │ │ ├── auth_scheme_preference.rs
│ │ │ │ ├── aws_chunked.rs
│ │ │ │ ├── blns/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ └── blns.txt
│ │ │ │ ├── body_size_hint.rs
│ │ │ │ ├── bucket-required.rs
│ │ │ │ ├── business_metrics.rs
│ │ │ │ ├── checksums.rs
│ │ │ │ ├── client_construction.rs
│ │ │ │ ├── concurrency.rs
│ │ │ │ ├── config-override.rs
│ │ │ │ ├── config_to_builder.rs
│ │ │ │ ├── content-length-enforcement.rs
│ │ │ │ ├── credential_features.rs
│ │ │ │ ├── customizable-operation.rs
│ │ │ │ ├── data/
│ │ │ │ │ ├── aws_chunked/
│ │ │ │ │ │ ├── chunk-signing.json
│ │ │ │ │ │ ├── custom-chunk-size.json
│ │ │ │ │ │ └── no-chunking.json
│ │ │ │ │ ├── content-length-enforcement/
│ │ │ │ │ │ ├── get-object-long.json
│ │ │ │ │ │ ├── get-object-short.json
│ │ │ │ │ │ └── head-object.json
│ │ │ │ │ ├── express/
│ │ │ │ │ │ └── mixed-auths.json
│ │ │ │ │ ├── no_auth/
│ │ │ │ │ │ ├── get-object.json
│ │ │ │ │ │ ├── head-object.json
│ │ │ │ │ │ ├── list-objects-v2.json
│ │ │ │ │ │ └── list-objects.json
│ │ │ │ │ └── request-information-headers/
│ │ │ │ │ ├── slow-network-and-late-client-clock.json
│ │ │ │ │ ├── three-retries_and-then-success.json
│ │ │ │ │ └── three-successful-attempts.json
│ │ │ │ ├── endpoints.rs
│ │ │ │ ├── expires_interceptor.rs
│ │ │ │ ├── express.rs
│ │ │ │ ├── identity-cache.rs
│ │ │ │ ├── ignore-invalid-xml-body-root.rs
│ │ │ │ ├── interceptors.rs
│ │ │ │ ├── mocks.rs
│ │ │ │ ├── naughty-string-metadata.rs
│ │ │ │ ├── no_auth.rs
│ │ │ │ ├── normalize-uri-path.rs
│ │ │ │ ├── presigning.rs
│ │ │ │ ├── query-strings-are-correctly-encoded.rs
│ │ │ │ ├── reconnects.rs
│ │ │ │ ├── recursion-detection.rs
│ │ │ │ ├── request_id.rs
│ │ │ │ ├── request_information_headers.rs
│ │ │ │ ├── required-query-params.rs
│ │ │ │ ├── retry-classifier-customization.rs
│ │ │ │ ├── select-object-content.json
│ │ │ │ ├── select-object-content.rs
│ │ │ │ ├── service_timeout_overrides.rs
│ │ │ │ ├── signing-it.rs
│ │ │ │ ├── sigv4a_signing_region_set.rs
│ │ │ │ ├── size-type.rs
│ │ │ │ ├── stalled-stream-protection.rs
│ │ │ │ ├── status-200-errors.rs
│ │ │ │ ├── streaming-response.rs
│ │ │ │ ├── timeouts.rs
│ │ │ │ └── token_bucket_time_source.rs
│ │ │ ├── s3control/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ └── signing-it.rs
│ │ │ ├── sts/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── retry_idp_comms_err.rs
│ │ │ │ └── signing-it.rs
│ │ │ ├── telemetry/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── metrics.rs
│ │ │ │ ├── observability_feature_metrics.rs
│ │ │ │ ├── spans.rs
│ │ │ │ └── utils/
│ │ │ │ └── mod.rs
│ │ │ ├── test.sh
│ │ │ ├── timestreamquery/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── endpoint_disco.rs
│ │ │ │ └── traffic.json
│ │ │ ├── transcribestreaming/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── error.json
│ │ │ │ ├── success.json
│ │ │ │ └── test.rs
│ │ │ ├── webassembly-no-os/
│ │ │ │ ├── .cargo/
│ │ │ │ │ └── config.toml
│ │ │ │ ├── Cargo.toml
│ │ │ │ ├── run-wasm32-unknown-unknown.sh
│ │ │ │ └── src/
│ │ │ │ ├── lib.rs
│ │ │ │ ├── wasm32_unknown_unknown.rs
│ │ │ │ └── wasm32_wasip2.rs
│ │ │ └── webassembly-wstd/
│ │ │ ├── .cargo/
│ │ │ │ └── config.toml
│ │ │ ├── Cargo.toml
│ │ │ └── src/
│ │ │ └── lib.rs
│ │ ├── sdk-external-types.toml
│ │ ├── sync-models.py
│ │ └── test-services.py
│ └── sdk-adhoc-test/
│ ├── .gitignore
│ ├── README.md
│ ├── build.gradle.kts
│ └── models/
│ ├── apigateway-rules.smithy
│ ├── required-value-test.smithy
│ └── single-static-endpoint.smithy
├── build.gradle.kts
├── buildSrc/
│ ├── build.gradle.kts
│ ├── settings.gradle.kts
│ └── src/
│ ├── main/
│ │ └── kotlin/
│ │ ├── CodegenTestCommon.kt
│ │ ├── CrateSet.kt
│ │ ├── Extensions.kt
│ │ ├── HashUtils.kt
│ │ ├── ManifestPatcher.kt
│ │ ├── PropertyRetriever.kt
│ │ ├── RustBuildTool.kt
│ │ ├── aws/
│ │ │ └── sdk/
│ │ │ ├── CrateVersioner.kt
│ │ │ ├── DocsLandingPage.kt
│ │ │ ├── ModelMetadata.kt
│ │ │ ├── ServiceLoader.kt
│ │ │ └── VersionsManifest.kt
│ │ ├── smithy-rs.kotlin-conventions.gradle.kts
│ │ ├── smithy-rs.publishing-conventions.gradle.kts
│ │ └── tasks/
│ │ ├── CheckMavenCentralPublishingNeeded.kt
│ │ └── VerifyCodegenVersionBump.kt
│ └── test/
│ └── kotlin/
│ ├── CrateSetTest.kt
│ ├── ManifestPatcherTest.kt
│ └── aws/
│ └── sdk/
│ ├── IndependentCrateVersionerTest.kt
│ ├── ModelMetadataTest.kt
│ └── VersionsManifestTest.kt
├── ci
├── ci.mk
├── clippy-root.toml
├── codegen-client/
│ ├── build.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── kotlin/
│ │ │ └── software/
│ │ │ └── amazon/
│ │ │ └── smithy/
│ │ │ └── rust/
│ │ │ └── codegen/
│ │ │ └── client/
│ │ │ ├── smithy/
│ │ │ │ ├── ClientCodegenContext.kt
│ │ │ │ ├── ClientCodegenVisitor.kt
│ │ │ │ ├── ClientReExports.kt
│ │ │ │ ├── ClientReservedWords.kt
│ │ │ │ ├── ClientRustModule.kt
│ │ │ │ ├── ClientRustSettings.kt
│ │ │ │ ├── RustClientCodegenPlugin.kt
│ │ │ │ ├── auth/
│ │ │ │ │ ├── AuthDecorator.kt
│ │ │ │ │ ├── AuthIndex.kt
│ │ │ │ │ ├── AuthSchemeParamsGenerator.kt
│ │ │ │ │ ├── AuthSchemeResolverGenerator.kt
│ │ │ │ │ └── AuthTypesGenerator.kt
│ │ │ │ ├── customizations/
│ │ │ │ │ ├── AuthEndpointOrchestrationV2MarkerCustomization.kt
│ │ │ │ │ ├── ClientCustomizations.kt
│ │ │ │ │ ├── ClientDocsGenerator.kt
│ │ │ │ │ ├── ConnectionPoisoningConfigCustomization.kt
│ │ │ │ │ ├── DocsRsMetadataDecorator.kt
│ │ │ │ │ ├── HttpAuthDecorator.kt
│ │ │ │ │ ├── HttpChecksumRequiredGenerator.kt
│ │ │ │ │ ├── HttpConnectorConfigDecorator.kt
│ │ │ │ │ ├── IdempotencyTokenDecorator.kt
│ │ │ │ │ ├── IdempotencyTokenGenerator.kt
│ │ │ │ │ ├── IdentityCacheDecorator.kt
│ │ │ │ │ ├── InterceptorConfigCustomization.kt
│ │ │ │ │ ├── ManifestHintsDecorator.kt
│ │ │ │ │ ├── MetadataCustomization.kt
│ │ │ │ │ ├── NoAuthDecorator.kt
│ │ │ │ │ ├── RequestCompressionGenerator.kt
│ │ │ │ │ ├── ResiliencyConfigCustomization.kt
│ │ │ │ │ ├── RetryClassifierConfigCustomization.kt
│ │ │ │ │ ├── RetryModeFeatureTrackerRuntimePluginCustomization.kt
│ │ │ │ │ ├── SensitiveOutputDecorator.kt
│ │ │ │ │ ├── StaticSdkFeatureTrackerDecorator.kt
│ │ │ │ │ └── TimeSourceCustomization.kt
│ │ │ │ ├── customize/
│ │ │ │ │ ├── ClientCodegenDecorator.kt
│ │ │ │ │ ├── ConditionalDecorator.kt
│ │ │ │ │ └── RequiredCustomizations.kt
│ │ │ │ ├── endpoint/
│ │ │ │ │ ├── ClientContextConfigCustomization.kt
│ │ │ │ │ ├── EndpointConfigCustomization.kt
│ │ │ │ │ ├── EndpointParamsDecorator.kt
│ │ │ │ │ ├── EndpointRulesetIndex.kt
│ │ │ │ │ ├── EndpointTypesGenerator.kt
│ │ │ │ │ ├── EndpointsDecorator.kt
│ │ │ │ │ ├── Util.kt
│ │ │ │ │ ├── generators/
│ │ │ │ │ │ ├── EndpointBddGenerator.kt
│ │ │ │ │ │ ├── EndpointParamsGenerator.kt
│ │ │ │ │ │ ├── EndpointParamsInterceptorGenerator.kt
│ │ │ │ │ │ ├── EndpointResolverGenerator.kt
│ │ │ │ │ │ └── EndpointTestGenerator.kt
│ │ │ │ │ └── rulesgen/
│ │ │ │ │ ├── BddExpressionGenerator.kt
│ │ │ │ │ ├── ExpressionGenerator.kt
│ │ │ │ │ ├── LiteralGenerator.kt
│ │ │ │ │ ├── Ownership.kt
│ │ │ │ │ ├── StdLib.kt
│ │ │ │ │ └── TemplateGenerator.kt
│ │ │ │ ├── generators/
│ │ │ │ │ ├── ClientBuilderInstantiator.kt
│ │ │ │ │ ├── ClientEnumGenerator.kt
│ │ │ │ │ ├── ClientInstantiator.kt
│ │ │ │ │ ├── ClientRuntimeTypesReExportGenerator.kt
│ │ │ │ │ ├── ConfigOverrideRuntimePluginGenerator.kt
│ │ │ │ │ ├── EndpointTraitBindingGenerator.kt
│ │ │ │ │ ├── ErrorCorrection.kt
│ │ │ │ │ ├── NestedAccessorGenerator.kt
│ │ │ │ │ ├── OperationCustomization.kt
│ │ │ │ │ ├── OperationGenerator.kt
│ │ │ │ │ ├── OperationRuntimePluginGenerator.kt
│ │ │ │ │ ├── PaginatorGenerator.kt
│ │ │ │ │ ├── SensitiveIndex.kt
│ │ │ │ │ ├── ServiceGenerator.kt
│ │ │ │ │ ├── ServiceRuntimePluginGenerator.kt
│ │ │ │ │ ├── client/
│ │ │ │ │ │ ├── CustomizableOperationDecorator.kt
│ │ │ │ │ │ ├── CustomizableOperationGenerator.kt
│ │ │ │ │ │ ├── CustomizableOperationImplGenerator.kt
│ │ │ │ │ │ ├── FluentBuilderGenerator.kt
│ │ │ │ │ │ ├── FluentClientDecorator.kt
│ │ │ │ │ │ ├── FluentClientDocs.kt
│ │ │ │ │ │ └── FluentClientGenerator.kt
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── IdempotencyTokenProviderCustomization.kt
│ │ │ │ │ │ ├── ServiceConfigGenerator.kt
│ │ │ │ │ │ └── StalledStreamProtectionConfigCustomization.kt
│ │ │ │ │ ├── error/
│ │ │ │ │ │ ├── ErrorCustomization.kt
│ │ │ │ │ │ ├── ErrorGenerator.kt
│ │ │ │ │ │ ├── OperationErrorGenerator.kt
│ │ │ │ │ │ └── ServiceErrorGenerator.kt
│ │ │ │ │ ├── http/
│ │ │ │ │ │ ├── RequestBindingGenerator.kt
│ │ │ │ │ │ └── ResponseBindingGenerator.kt
│ │ │ │ │ ├── protocol/
│ │ │ │ │ │ ├── ClientProtocolTestGenerator.kt
│ │ │ │ │ │ ├── ProtocolParserGenerator.kt
│ │ │ │ │ │ ├── RequestSerializerGenerator.kt
│ │ │ │ │ │ ├── ResponseDeserializerGenerator.kt
│ │ │ │ │ │ └── SerdeBenchmarkTestGenerator.kt
│ │ │ │ │ └── waiters/
│ │ │ │ │ ├── RustJmespathShapeTraversalGenerator.kt
│ │ │ │ │ ├── RustWaiterMatcherGenerator.kt
│ │ │ │ │ ├── WaitableGenerator.kt
│ │ │ │ │ └── WaiterAcceptorGenerator.kt
│ │ │ │ ├── protocols/
│ │ │ │ │ ├── ClientProtocolLoader.kt
│ │ │ │ │ └── HttpBoundProtocolGenerator.kt
│ │ │ │ ├── traits/
│ │ │ │ │ ├── IncompatibleWithStalledStreamProtectionTrait.kt
│ │ │ │ │ └── IsTruncatedPaginatorTrait.kt
│ │ │ │ └── transformers/
│ │ │ │ ├── AddErrorMessage.kt
│ │ │ │ └── DisableStalledStreamProtection.kt
│ │ │ └── testutil/
│ │ │ ├── ClientCodegenIntegrationTest.kt
│ │ │ ├── EndpointTestDiscovery.kt
│ │ │ └── TestHelpers.kt
│ │ └── resources/
│ │ └── META-INF/
│ │ └── services/
│ │ └── software.amazon.smithy.build.SmithyBuildPlugin
│ └── test/
│ └── kotlin/
│ └── software/
│ └── amazon/
│ └── smithy/
│ └── rust/
│ └── codegen/
│ └── client/
│ ├── smithy/
│ │ ├── BigNumberPrecisionTest.kt
│ │ ├── ClientCodegenVisitorTest.kt
│ │ ├── EventStreamSymbolProviderTest.kt
│ │ ├── NamingObstacleCourseTest.kt
│ │ ├── StreamingShapeSymbolProviderTest.kt
│ │ ├── auth/
│ │ │ ├── AuthDecoratorTest.kt
│ │ │ ├── AuthIndexTest.kt
│ │ │ └── AuthTypesGeneratorTest.kt
│ │ ├── customizations/
│ │ │ ├── HttpAuthDecoratorTest.kt
│ │ │ ├── MetadataCustomizationTest.kt
│ │ │ ├── ResiliencyConfigCustomizationTest.kt
│ │ │ └── SensitiveOutputDecoratorTest.kt
│ │ ├── endpoint/
│ │ │ ├── ClientContextConfigCustomizationTest.kt
│ │ │ ├── EndpointParamsGeneratorTest.kt
│ │ │ ├── EndpointResolverGeneratorTest.kt
│ │ │ ├── EndpointsDecoratorTest.kt
│ │ │ └── rulesgen/
│ │ │ ├── ExpressionGeneratorTest.kt
│ │ │ └── TemplateGeneratorTest.kt
│ │ ├── generators/
│ │ │ ├── ClientEnumGeneratorTest.kt
│ │ │ ├── ClientInstantiatorTest.kt
│ │ │ ├── ClientRuntimeTypesReExportGeneratorTest.kt
│ │ │ ├── ConfigOverrideRuntimePluginGeneratorTest.kt
│ │ │ ├── EndpointTraitBindingsTest.kt
│ │ │ ├── ErrorCorrectionTest.kt
│ │ │ ├── PaginatorGeneratorTest.kt
│ │ │ ├── SensitiveIndexTest.kt
│ │ │ ├── client/
│ │ │ │ ├── CustomizableOperationGeneratorTest.kt
│ │ │ │ └── FluentClientGeneratorTest.kt
│ │ │ ├── config/
│ │ │ │ └── ServiceConfigGeneratorTest.kt
│ │ │ ├── error/
│ │ │ │ ├── ErrorGeneratorTest.kt
│ │ │ │ ├── OperationErrorGeneratorTest.kt
│ │ │ │ └── ServiceErrorGeneratorTest.kt
│ │ │ ├── http/
│ │ │ │ ├── RequestBindingGeneratorTest.kt
│ │ │ │ └── ResponseBindingGeneratorTest.kt
│ │ │ ├── protocol/
│ │ │ │ ├── ProtocolParserGeneratorTest.kt
│ │ │ │ └── ProtocolTestGeneratorTest.kt
│ │ │ └── waiters/
│ │ │ ├── RustJmespathShapeTraversalGeneratorTest.kt
│ │ │ └── RustWaiterMatcherGeneratorTest.kt
│ │ ├── protocols/
│ │ │ ├── AwsQueryCompatibleTest.kt
│ │ │ ├── AwsQueryTest.kt
│ │ │ ├── ClientProtocolLoaderTest.kt
│ │ │ ├── Ec2QueryTest.kt
│ │ │ ├── RestJsonTest.kt
│ │ │ ├── RestXmlTest.kt
│ │ │ └── eventstream/
│ │ │ ├── ClientEventStreamMarshallerGeneratorTest.kt
│ │ │ └── ClientEventStreamUnmarshallerGeneratorTest.kt
│ │ └── transformers/
│ │ └── DisableStalledStreamProtectionTest.kt
│ ├── testutil/
│ │ └── Matchers.kt
│ └── tool/
│ └── TimeTestSuiteGenerator.kt
├── codegen-client-test/
│ ├── .gitignore
│ ├── README.md
│ ├── build.gradle.kts
│ └── model/
│ ├── basic-enums.smithy
│ ├── dynamodb.json
│ ├── endpoint-rules.smithy
│ ├── error-correction-nullability-test.smithy
│ ├── main.smithy
│ ├── more-nesting.smithy
│ ├── nested.smithy
│ ├── rest-xml-extras.smithy
│ └── rest-xml-unwrapped-errors.smithy
├── codegen-core/
│ ├── build.gradle.kts
│ ├── common-test-models/
│ │ ├── aws-json-query-compat.smithy
│ │ ├── big-numbers.smithy
│ │ ├── constraints.smithy
│ │ ├── ebs.json
│ │ ├── misc.smithy
│ │ ├── naming-obstacle-course-casing.smithy
│ │ ├── naming-obstacle-course-ops.smithy
│ │ ├── naming-obstacle-course-structs.smithy
│ │ ├── pokemon-awsjson.smithy
│ │ ├── pokemon-common.smithy
│ │ ├── pokemon.smithy
│ │ ├── rest-json-extras.smithy
│ │ ├── rpcv2Cbor-extras.smithy
│ │ ├── simple.smithy
│ │ └── unique-items.smithy
│ └── src/
│ ├── main/
│ │ └── kotlin/
│ │ └── software/
│ │ └── amazon/
│ │ └── smithy/
│ │ └── rust/
│ │ └── codegen/
│ │ └── core/
│ │ ├── Version.kt
│ │ ├── rustlang/
│ │ │ ├── CargoDependency.kt
│ │ │ ├── RustGenerics.kt
│ │ │ ├── RustModule.kt
│ │ │ ├── RustReservedWords.kt
│ │ │ ├── RustType.kt
│ │ │ ├── RustWriter.kt
│ │ │ ├── UseDeclarations.kt
│ │ │ └── Writable.kt
│ │ ├── smithy/
│ │ │ ├── CodegenContext.kt
│ │ │ ├── CodegenDelegator.kt
│ │ │ ├── CodegenTarget.kt
│ │ │ ├── CoreRustSettings.kt
│ │ │ ├── DirectedWalker.kt
│ │ │ ├── EventStreamSymbolProvider.kt
│ │ │ ├── PublicImportSymbolProvider.kt
│ │ │ ├── RuntimeType.kt
│ │ │ ├── RustSymbolProvider.kt
│ │ │ ├── StreamingTraitSymbolProvider.kt
│ │ │ ├── SymbolExt.kt
│ │ │ ├── SymbolMetadataProvider.kt
│ │ │ ├── SymbolVisitor.kt
│ │ │ ├── customizations/
│ │ │ │ ├── AllowLintsCustomization.kt
│ │ │ │ ├── CrateVersionCustomization.kt
│ │ │ │ └── SmithyTypesPubUseExtra.kt
│ │ │ ├── customize/
│ │ │ │ ├── CoreCodegenDecorator.kt
│ │ │ │ └── Customization.kt
│ │ │ ├── generators/
│ │ │ │ ├── BuilderGenerator.kt
│ │ │ │ ├── BuilderInstantiator.kt
│ │ │ │ ├── CargoTomlGenerator.kt
│ │ │ │ ├── DefaultValueGenerator.kt
│ │ │ │ ├── EnumGenerator.kt
│ │ │ │ ├── Instantiator.kt
│ │ │ │ ├── LibRsGenerator.kt
│ │ │ │ ├── StructureGenerator.kt
│ │ │ │ ├── UnionGenerator.kt
│ │ │ │ ├── error/
│ │ │ │ │ └── ErrorImplGenerator.kt
│ │ │ │ ├── http/
│ │ │ │ │ └── HttpBindingGenerator.kt
│ │ │ │ └── protocol/
│ │ │ │ ├── ProtocolGenerator.kt
│ │ │ │ ├── ProtocolSupport.kt
│ │ │ │ └── ProtocolTestGenerator.kt
│ │ │ ├── protocols/
│ │ │ │ ├── AwsJson.kt
│ │ │ │ ├── AwsQuery.kt
│ │ │ │ ├── AwsQueryCompatible.kt
│ │ │ │ ├── Ec2Query.kt
│ │ │ │ ├── HttpBindingResolver.kt
│ │ │ │ ├── HttpBoundProtocolPayloadGenerator.kt
│ │ │ │ ├── Protocol.kt
│ │ │ │ ├── ProtocolFunctions.kt
│ │ │ │ ├── ProtocolLoader.kt
│ │ │ │ ├── RestJson.kt
│ │ │ │ ├── RestXml.kt
│ │ │ │ ├── RpcV2Cbor.kt
│ │ │ │ ├── XmlNameIndex.kt
│ │ │ │ ├── parse/
│ │ │ │ │ ├── AwsQueryParserGenerator.kt
│ │ │ │ │ ├── CborParserGenerator.kt
│ │ │ │ │ ├── Ec2QueryParserGenerator.kt
│ │ │ │ │ ├── EventStreamUnmarshallerGenerator.kt
│ │ │ │ │ ├── JsonParserGenerator.kt
│ │ │ │ │ ├── RestXmlParserGenerator.kt
│ │ │ │ │ ├── ReturnSymbolToParse.kt
│ │ │ │ │ ├── StructuredDataParserGenerator.kt
│ │ │ │ │ └── XmlBindingTraitParserGenerator.kt
│ │ │ │ └── serialize/
│ │ │ │ ├── AwsQuerySerializerGenerator.kt
│ │ │ │ ├── CborSerializerGenerator.kt
│ │ │ │ ├── Ec2QuerySerializerGenerator.kt
│ │ │ │ ├── EventStreamErrorMarshallerGenerator.kt
│ │ │ │ ├── EventStreamMarshallerGenerator.kt
│ │ │ │ ├── JsonSerializerGenerator.kt
│ │ │ │ ├── QuerySerializerGenerator.kt
│ │ │ │ ├── SerializerUtil.kt
│ │ │ │ ├── StructuredDataSerializerGenerator.kt
│ │ │ │ ├── ValueExpression.kt
│ │ │ │ └── XmlBindingTraitSerializerGenerator.kt
│ │ │ ├── traits/
│ │ │ │ ├── AllowInvalidXmlRoot.kt
│ │ │ │ ├── RustBoxTrait.kt
│ │ │ │ ├── SyntheticEventStreamUnionTrait.kt
│ │ │ │ ├── SyntheticInputTrait.kt
│ │ │ │ └── SyntheticOutputTrait.kt
│ │ │ └── transformers/
│ │ │ ├── EventStreamNormalizer.kt
│ │ │ ├── OperationNormalizer.kt
│ │ │ └── RecursiveShapeBoxer.kt
│ │ ├── testutil/
│ │ │ ├── BasicTestModels.kt
│ │ │ ├── CodegenIntegrationTest.kt
│ │ │ ├── DefaultBuilderInstantiator.kt
│ │ │ ├── EventStreamMarshallTestCases.kt
│ │ │ ├── EventStreamTestModels.kt
│ │ │ ├── EventStreamUnmarshallTestCases.kt
│ │ │ ├── NamingObstacleCourseTestModels.kt
│ │ │ ├── Rust.kt
│ │ │ └── TestHelpers.kt
│ │ └── util/
│ │ ├── Exec.kt
│ │ ├── LetIf.kt
│ │ ├── Map.kt
│ │ ├── Option.kt
│ │ ├── Panic.kt
│ │ ├── Smithy.kt
│ │ ├── Strings.kt
│ │ └── Synthetics.kt
│ └── test/
│ ├── kotlin/
│ │ └── software/
│ │ └── amazon/
│ │ └── smithy/
│ │ └── rust/
│ │ └── codegen/
│ │ └── core/
│ │ ├── VersionTest.kt
│ │ ├── rustlang/
│ │ │ ├── CargoDependencyTest.kt
│ │ │ ├── InlineDependencyTest.kt
│ │ │ ├── RustGenericsTest.kt
│ │ │ ├── RustReservedWordsTest.kt
│ │ │ ├── RustTypeTest.kt
│ │ │ ├── RustWriterTest.kt
│ │ │ ├── UseDeclarationsTest.kt
│ │ │ └── WritableTest.kt
│ │ ├── smithy/
│ │ │ ├── CodegenDelegatorTest.kt
│ │ │ ├── RuntimeTypeTest.kt
│ │ │ ├── SymbolVisitorTest.kt
│ │ │ ├── customizations/
│ │ │ │ └── SmithyTypesPubUseExtraTest.kt
│ │ │ ├── generators/
│ │ │ │ ├── BuilderGeneratorTest.kt
│ │ │ │ ├── CargoTomlGeneratorTest.kt
│ │ │ │ ├── EnumGeneratorTest.kt
│ │ │ │ ├── InstantiatorTest.kt
│ │ │ │ ├── StructureGeneratorTest.kt
│ │ │ │ ├── TestEnumType.kt
│ │ │ │ ├── UnionGeneratorTest.kt
│ │ │ │ └── error/
│ │ │ │ └── ErrorImplGeneratorTest.kt
│ │ │ ├── protocols/
│ │ │ │ ├── ProtocolFunctionsTest.kt
│ │ │ │ ├── parse/
│ │ │ │ │ ├── AwsQueryParserGeneratorTest.kt
│ │ │ │ │ ├── CborParserGeneratorTest.kt
│ │ │ │ │ ├── Ec2QueryParserGeneratorTest.kt
│ │ │ │ │ ├── JsonParserGeneratorTest.kt
│ │ │ │ │ └── XmlBindingTraitParserGeneratorTest.kt
│ │ │ │ └── serialize/
│ │ │ │ ├── AwsQuerySerializerGeneratorTest.kt
│ │ │ │ ├── CborSerializerGeneratorTest.kt
│ │ │ │ ├── Ec2QuerySerializerGeneratorTest.kt
│ │ │ │ ├── JsonSerializerGeneratorTest.kt
│ │ │ │ └── XmlBindingTraitSerializerGeneratorTest.kt
│ │ │ └── transformers/
│ │ │ ├── EventStreamNormalizerTest.kt
│ │ │ ├── OperationNormalizerTest.kt
│ │ │ ├── RecursiveShapeBoxerTest.kt
│ │ │ └── RecursiveShapesIntegrationTest.kt
│ │ └── util/
│ │ ├── ExecKtTest.kt
│ │ ├── ExtensionsTest.kt
│ │ ├── MapTest.kt
│ │ ├── RustToolChainTomlTest.kt
│ │ ├── StringsTest.kt
│ │ └── SyntheticsTest.kt
│ └── resources/
│ ├── allNames.txt
│ └── testOutput.txt
├── codegen-serde/
│ ├── build.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── kotlin/
│ │ │ └── software/
│ │ │ └── amazon/
│ │ │ └── smithy/
│ │ │ └── rust/
│ │ │ └── codegen/
│ │ │ └── serde/
│ │ │ ├── SerdeDecorator.kt
│ │ │ ├── SerializeImplGenerator.kt
│ │ │ ├── SupportStructures.kt
│ │ │ └── Traits.kt
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── services/
│ │ │ ├── software.amazon.smithy.model.traits.TraitService
│ │ │ ├── software.amazon.smithy.rust.codegen.client.smithy.customize.ClientCodegenDecorator
│ │ │ └── software.amazon.smithy.rust.codegen.server.smithy.customize.ServerCodegenDecorator
│ │ └── smithy/
│ │ ├── manifest
│ │ └── serde.smithy
│ └── test/
│ └── kotlin/
│ └── software/
│ └── amazon/
│ └── smithy/
│ └── rust/
│ └── codegen/
│ └── serde/
│ ├── SerdeDecoratorTest.kt
│ └── SerdeProtocolTestTest.kt
├── codegen-server/
│ ├── README.md
│ ├── build.gradle.kts
│ ├── codegen-server-python/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── main/
│ │ │ ├── kotlin/
│ │ │ │ └── software/
│ │ │ │ └── amazon/
│ │ │ │ └── smithy/
│ │ │ │ └── rust/
│ │ │ │ └── codegen/
│ │ │ │ └── server/
│ │ │ │ └── python/
│ │ │ │ └── smithy/
│ │ │ │ ├── PythonEventStreamSymbolProvider.kt
│ │ │ │ ├── PythonServerCargoDependency.kt
│ │ │ │ ├── PythonServerCodegenVisitor.kt
│ │ │ │ ├── PythonServerRuntimeType.kt
│ │ │ │ ├── PythonServerRustModule.kt
│ │ │ │ ├── PythonServerSymbolProvider.kt
│ │ │ │ ├── PythonType.kt
│ │ │ │ ├── RustServerCodegenPythonPlugin.kt
│ │ │ │ ├── customizations/
│ │ │ │ │ └── PythonServerCodegenDecorator.kt
│ │ │ │ ├── generators/
│ │ │ │ │ ├── ConstrainedPythonBlobGenerator.kt
│ │ │ │ │ ├── PythonApplicationGenerator.kt
│ │ │ │ │ ├── PythonServerEnumGenerator.kt
│ │ │ │ │ ├── PythonServerEventStreamErrorGenerator.kt
│ │ │ │ │ ├── PythonServerEventStreamWrapperGenerator.kt
│ │ │ │ │ ├── PythonServerModuleGenerator.kt
│ │ │ │ │ ├── PythonServerOperationErrorGenerator.kt
│ │ │ │ │ ├── PythonServerOperationHandlerGenerator.kt
│ │ │ │ │ ├── PythonServerStructureGenerator.kt
│ │ │ │ │ └── PythonServerUnionGenerator.kt
│ │ │ │ ├── protocols/
│ │ │ │ │ └── PythonServerProtocolLoader.kt
│ │ │ │ └── testutil/
│ │ │ │ └── PythonServerTestHelpers.kt
│ │ │ └── resources/
│ │ │ ├── META-INF/
│ │ │ │ └── services/
│ │ │ │ └── software.amazon.smithy.build.SmithyBuildPlugin
│ │ │ ├── stubgen.py
│ │ │ └── stubgen.sh
│ │ └── test/
│ │ └── kotlin/
│ │ └── software/
│ │ └── amazon/
│ │ └── smithy/
│ │ └── rust/
│ │ └── codegen/
│ │ └── server/
│ │ └── python/
│ │ └── smithy/
│ │ └── generators/
│ │ ├── PythonServerRequiredPrecedeOptionalTest.kt
│ │ ├── PythonServerSymbolProviderTest.kt
│ │ ├── PythonServerTypesTest.kt
│ │ └── PythonTypeInformationGenerationTest.kt
│ ├── codegen-server-typescript/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── main/
│ │ ├── kotlin/
│ │ │ └── software/
│ │ │ └── amazon/
│ │ │ └── smithy/
│ │ │ └── rust/
│ │ │ └── codegen/
│ │ │ └── server/
│ │ │ └── typescript/
│ │ │ └── smithy/
│ │ │ ├── RustServerCodegenTsPlugin.kt
│ │ │ ├── TsServerCargoDependency.kt
│ │ │ ├── TsServerCodegenVisitor.kt
│ │ │ ├── TsServerModuleDocProvider.kt
│ │ │ ├── TsServerRuntimeType.kt
│ │ │ ├── TsServerSymbolProvider.kt
│ │ │ ├── customizations/
│ │ │ │ └── TsServerCodegenDecorator.kt
│ │ │ └── generators/
│ │ │ ├── TsApplicationGenerator.kt
│ │ │ ├── TsServerEnumGenerator.kt
│ │ │ ├── TsServerOperationErrorGenerator.kt
│ │ │ ├── TsServerOperationHandlerGenerator.kt
│ │ │ └── TsServerStructureGenerator.kt
│ │ └── resources/
│ │ └── META-INF/
│ │ └── services/
│ │ └── software.amazon.smithy.build.SmithyBuildPlugin
│ └── src/
│ ├── main/
│ │ ├── kotlin/
│ │ │ └── software/
│ │ │ └── amazon/
│ │ │ └── smithy/
│ │ │ └── rust/
│ │ │ └── codegen/
│ │ │ └── server/
│ │ │ └── smithy/
│ │ │ ├── ConstrainedShapeSymbolMetadataProvider.kt
│ │ │ ├── ConstrainedShapeSymbolProvider.kt
│ │ │ ├── ConstraintViolationSymbolProvider.kt
│ │ │ ├── Constraints.kt
│ │ │ ├── CustomShapeSymbolProvider.kt
│ │ │ ├── DeriveEqAndHashSymbolMetadataProvider.kt
│ │ │ ├── EnumTraitValidationErrorMessage.kt
│ │ │ ├── LengthTraitValidationErrorMessage.kt
│ │ │ ├── PatternTraitEscapedSpecialCharsValidator.kt
│ │ │ ├── PatternTraitValidationErrorMessage.kt
│ │ │ ├── PubCrateConstrainedShapeSymbolProvider.kt
│ │ │ ├── PubCrateConstraintViolationSymbolProvider.kt
│ │ │ ├── RangeTraitValidationErrorMessage.kt
│ │ │ ├── RustCrateInlineModuleComposingWriter.kt
│ │ │ ├── RustServerCodegenPlugin.kt
│ │ │ ├── ServerCargoDependency.kt
│ │ │ ├── ServerCodegenContext.kt
│ │ │ ├── ServerCodegenVisitor.kt
│ │ │ ├── ServerReservedWords.kt
│ │ │ ├── ServerRuntimeType.kt
│ │ │ ├── ServerRustModule.kt
│ │ │ ├── ServerRustSettings.kt
│ │ │ ├── ServerSymbolProviders.kt
│ │ │ ├── UnconstrainedShapeSymbolProvider.kt
│ │ │ ├── UniqueItemsTraitValidationErrorMessage.kt
│ │ │ ├── ValidateUnsupportedConstraints.kt
│ │ │ ├── customizations/
│ │ │ │ ├── AddTypeFieldToServerErrorsCborCustomization.kt
│ │ │ │ ├── AdditionalErrorsDecorator.kt
│ │ │ │ ├── BeforeEncodingMapOrCollectionCborCustomization.kt
│ │ │ │ ├── BeforeIteratingOverMapOrCollectionJsonCustomization.kt
│ │ │ │ ├── BeforeSerializingMemberCborCustomization.kt
│ │ │ │ ├── BeforeSerializingMemberJsonCustomization.kt
│ │ │ │ ├── CustomValidationExceptionWithReasonDecorator.kt
│ │ │ │ ├── ServerRequiredCustomizations.kt
│ │ │ │ ├── SigV4EventStreamDecorator.kt
│ │ │ │ ├── SigV4EventStreamSupportStructures.kt
│ │ │ │ ├── SmithyValidationExceptionDecorator.kt
│ │ │ │ └── UserProvidedValidationExceptionDecorator.kt
│ │ │ ├── customize/
│ │ │ │ └── ServerCodegenDecorator.kt
│ │ │ ├── generators/
│ │ │ │ ├── CollectionConstraintViolationGenerator.kt
│ │ │ │ ├── ConstrainedBlobGenerator.kt
│ │ │ │ ├── ConstrainedCollectionGenerator.kt
│ │ │ │ ├── ConstrainedMapGenerator.kt
│ │ │ │ ├── ConstrainedMapGeneratorCommon.kt
│ │ │ │ ├── ConstrainedNumberGenerator.kt
│ │ │ │ ├── ConstrainedShapeGeneratorCommon.kt
│ │ │ │ ├── ConstrainedStringGenerator.kt
│ │ │ │ ├── ConstrainedTraitForEnumGenerator.kt
│ │ │ │ ├── DocHandlerGenerator.kt
│ │ │ │ ├── LenghTraitCommon.kt
│ │ │ │ ├── MapConstraintViolationGenerator.kt
│ │ │ │ ├── PubCrateConstrainedCollectionGenerator.kt
│ │ │ │ ├── PubCrateConstrainedMapGenerator.kt
│ │ │ │ ├── ScopeMacroGenerator.kt
│ │ │ │ ├── ServerBuilderConstraintViolations.kt
│ │ │ │ ├── ServerBuilderGenerator.kt
│ │ │ │ ├── ServerBuilderGeneratorCommon.kt
│ │ │ │ ├── ServerBuilderGeneratorWithoutPublicConstrainedTypes.kt
│ │ │ │ ├── ServerBuilderSymbol.kt
│ │ │ │ ├── ServerEnumGenerator.kt
│ │ │ │ ├── ServerHttpSensitivityGenerator.kt
│ │ │ │ ├── ServerInstantiator.kt
│ │ │ │ ├── ServerOperationErrorGenerator.kt
│ │ │ │ ├── ServerOperationGenerator.kt
│ │ │ │ ├── ServerRootGenerator.kt
│ │ │ │ ├── ServerRuntimeTypesReExportsGenerator.kt
│ │ │ │ ├── ServerServiceGenerator.kt
│ │ │ │ ├── ServerStructureConstrainedTraitImpl.kt
│ │ │ │ ├── ServiceConfigGenerator.kt
│ │ │ │ ├── TraitInfo.kt
│ │ │ │ ├── UnconstrainedCollectionGenerator.kt
│ │ │ │ ├── UnconstrainedMapGenerator.kt
│ │ │ │ ├── UnconstrainedUnionGenerator.kt
│ │ │ │ ├── ValidationExceptionConversionGenerator.kt
│ │ │ │ ├── http/
│ │ │ │ │ ├── RestRequestSpecGenerator.kt
│ │ │ │ │ ├── ServerRequestBindingGenerator.kt
│ │ │ │ │ └── ServerResponseBindingGenerator.kt
│ │ │ │ └── protocol/
│ │ │ │ ├── ServerProtocol.kt
│ │ │ │ ├── ServerProtocolGenerator.kt
│ │ │ │ └── ServerProtocolTestGenerator.kt
│ │ │ ├── protocols/
│ │ │ │ ├── ServerAwsJson.kt
│ │ │ │ ├── ServerHttpBoundProtocolGenerator.kt
│ │ │ │ ├── ServerProtocolLoader.kt
│ │ │ │ ├── ServerRestJson.kt
│ │ │ │ ├── ServerRestXmlFactory.kt
│ │ │ │ └── ServerRpcV2CborFactory.kt
│ │ │ ├── testutil/
│ │ │ │ ├── HttpTestVersion.kt
│ │ │ │ ├── MultiVersionTestFailure.kt
│ │ │ │ ├── ServerCodegenIntegrationTest.kt
│ │ │ │ └── ServerTestHelpers.kt
│ │ │ ├── traits/
│ │ │ │ ├── ConstraintViolationRustBoxTrait.kt
│ │ │ │ ├── ShapeReachableFromOperationInputTagTrait.kt
│ │ │ │ └── SyntheticStructureFromConstrainedMemberTrait.kt
│ │ │ ├── transformers/
│ │ │ │ ├── AttachValidationExceptionToConstrainedOperationInputs.kt
│ │ │ │ ├── ConstrainedMemberTransform.kt
│ │ │ │ ├── RecursiveConstraintViolationBoxer.kt
│ │ │ │ ├── RemoveEbsModelValidationException.kt
│ │ │ │ ├── ServerProtocolBasedTransformationFactory.kt
│ │ │ │ └── ShapesReachableFromOperationInputTagger.kt
│ │ │ ├── util/
│ │ │ │ └── CustomValidationExceptionUtil.kt
│ │ │ └── validators/
│ │ │ └── CustomValidationExceptionValidator.kt
│ │ └── resources/
│ │ └── META-INF/
│ │ └── services/
│ │ ├── software.amazon.smithy.build.SmithyBuildPlugin
│ │ └── software.amazon.smithy.model.validation.Validator
│ └── test/
│ └── kotlin/
│ └── software/
│ └── amazon/
│ └── smithy/
│ └── rust/
│ └── codegen/
│ └── server/
│ └── smithy/
│ ├── ConstrainedShapeSymbolProviderTest.kt
│ ├── ConstraintsMemberShapeTest.kt
│ ├── ConstraintsTest.kt
│ ├── CustomShapeSymbolProviderTest.kt
│ ├── DeriveEqAndHashSymbolMetadataProviderTest.kt
│ ├── Http1xDependencyTest.kt
│ ├── NamingObstacleCourseTest.kt
│ ├── PatternTraitEscapedSpecialCharsValidatorTest.kt
│ ├── PubCrateConstrainedShapeSymbolProviderTest.kt
│ ├── RecursiveConstraintViolationsTest.kt
│ ├── RustCrateInlineModuleComposingWriterTest.kt
│ ├── ServerCodegenVisitorTest.kt
│ ├── ServerTypesReExportTest.kt
│ ├── UnconstrainedShapeSymbolProviderTest.kt
│ ├── UnionWithUnitTest.kt
│ ├── ValidateUnsupportedConstraintsAreNotUsedTest.kt
│ ├── customizations/
│ │ ├── AddValidationExceptionToConstrainedOperationsTest.kt
│ │ ├── AdditionalErrorsDecoratorTest.kt
│ │ ├── CustomValidationExceptionWithReasonDecoratorTest.kt
│ │ ├── PostprocessValidationExceptionNotAttachedErrorMessageDecoratorTest.kt
│ │ ├── SigV4EventStreamSupportStructuresTest.kt
│ │ └── UserProvidedValidationExceptionDecoratorTest.kt
│ ├── generators/
│ │ ├── ConstrainedBlobGeneratorTest.kt
│ │ ├── ConstrainedCollectionGeneratorTest.kt
│ │ ├── ConstrainedMapGeneratorTest.kt
│ │ ├── ConstrainedNumberGeneratorTest.kt
│ │ ├── ConstrainedStringGeneratorTest.kt
│ │ ├── EventStreamAcceptHeaderTest.kt
│ │ ├── ServerBuilderConstraintViolationsTest.kt
│ │ ├── ServerBuilderDefaultValuesTest.kt
│ │ ├── ServerBuilderGeneratorTest.kt
│ │ ├── ServerEnumGeneratorTest.kt
│ │ ├── ServerHttpSensitivityGeneratorTest.kt
│ │ ├── ServerInstantiatorTest.kt
│ │ ├── ServerOperationErrorGeneratorTest.kt
│ │ ├── ServerServiceGeneratorTest.kt
│ │ ├── ServiceConfigGeneratorTest.kt
│ │ ├── TestUtility.kt
│ │ ├── UnconstrainedCollectionGeneratorTest.kt
│ │ ├── UnconstrainedMapGeneratorTest.kt
│ │ └── UnconstrainedUnionGeneratorTest.kt
│ ├── protocols/
│ │ ├── eventstream/
│ │ │ ├── ServerEventStreamMarshallerGeneratorTest.kt
│ │ │ └── ServerEventStreamUnmarshallerGeneratorTest.kt
│ │ └── serialize/
│ │ ├── CborConstraintsIntegrationTest.kt
│ │ ├── CborSerializerAndParserGeneratorSerdeRoundTripIntegrationTest.kt
│ │ └── CborServiceShapePreservesCasing.kt
│ ├── testutil/
│ │ └── ServerHttpTestHelpers.kt
│ ├── transformers/
│ │ └── RecursiveConstraintViolationBoxerTest.kt
│ └── validators/
│ └── CustomValidationExceptionValidatorTest.kt
├── codegen-server-test/
│ ├── .gitignore
│ ├── README.md
│ ├── build.gradle.kts
│ ├── codegen-server-test-python/
│ │ └── build.gradle.kts
│ ├── codegen-server-test-typescript/
│ │ ├── build.gradle.kts
│ │ └── model/
│ │ ├── pokemon-common.smithy
│ │ └── pokemon.smithy
│ ├── custom-test-models/
│ │ └── custom-validation-exception.smithy
│ └── integration-tests/
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── eventstreams/
│ │ ├── Cargo.toml
│ │ ├── src/
│ │ │ ├── lib.rs
│ │ │ └── main.rs
│ │ └── tests/
│ │ └── structured_eventstream_tests.rs
│ └── eventstreams-legacy/
│ ├── Cargo.toml
│ ├── src/
│ │ ├── lib.rs
│ │ └── main.rs
│ └── tests/
│ └── structured_eventstream_tests.rs
├── codegen-traits/
│ ├── build.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── kotlin/
│ │ │ └── software/
│ │ │ └── amazon/
│ │ │ └── smithy/
│ │ │ └── framework/
│ │ │ └── rust/
│ │ │ ├── ValidationExceptionTrait.kt
│ │ │ ├── ValidationFieldListTrait.kt
│ │ │ ├── ValidationFieldMessageTrait.kt
│ │ │ ├── ValidationFieldNameTrait.kt
│ │ │ └── ValidationMessageTrait.kt
│ │ └── resources/
│ │ └── META-INF/
│ │ └── smithy/
│ │ ├── manifest
│ │ ├── services/
│ │ │ └── software.amazon.smithy.model.traits.TraitService
│ │ └── validation-exception.smithy
│ └── test/
│ └── kotlin/
│ └── software/
│ └── amazon/
│ └── smithy/
│ └── rust/
│ └── codegen/
│ └── traits/
│ ├── ValidationExceptionTraitTest.kt
│ ├── ValidationFieldListTraitTest.kt
│ ├── ValidationFieldMessageTraitTest.kt
│ ├── ValidationFieldNameTraitTest.kt
│ └── ValidationMessageTraitTest.kt
├── design/
│ ├── .gitignore
│ ├── README.md
│ ├── book.toml
│ ├── src/
│ │ ├── SUMMARY.md
│ │ ├── client/
│ │ │ ├── detailed_error_explanations.md
│ │ │ ├── identity_and_auth.md
│ │ │ ├── orchestrator.md
│ │ │ └── overview.md
│ │ ├── contributing/
│ │ │ ├── overview.md
│ │ │ └── writing_and_debugging_a_low-level_feature_that_relies_on_HTTP.md
│ │ ├── faq.md
│ │ ├── overview.md
│ │ ├── rfcs/
│ │ │ ├── overview.md
│ │ │ ├── rfc0001_shared_config.md
│ │ │ ├── rfc0002_http_versions.md
│ │ │ ├── rfc0003_presigning_api.md
│ │ │ ├── rfc0004_retry_behavior.md
│ │ │ ├── rfc0005_service_generation.md
│ │ │ ├── rfc0006_service_specific_middleware.md
│ │ │ ├── rfc0007_split_release_process.md
│ │ │ ├── rfc0008_paginators.md
│ │ │ ├── rfc0009_example_consolidation.md
│ │ │ ├── rfc0010_waiters.md
│ │ │ ├── rfc0011_crates_io_alpha_publishing.md
│ │ │ ├── rfc0012_independent_crate_versioning.md
│ │ │ ├── rfc0013_body_callback_apis.md
│ │ │ ├── rfc0014_timeout_config.md
│ │ │ ├── rfc0015_using_features_responsibly.md
│ │ │ ├── rfc0016_flexible_checksum_support.md
│ │ │ ├── rfc0017_customizable_client_operations.md
│ │ │ ├── rfc0018_logging_sensitive.md
│ │ │ ├── rfc0019_event_streams_errors.md
│ │ │ ├── rfc0020_service_builder.md
│ │ │ ├── rfc0021_dependency_versions.md
│ │ │ ├── rfc0022_error_context_and_compatibility.md
│ │ │ ├── rfc0023_refine_builder.md
│ │ │ ├── rfc0024_request_id.md
│ │ │ ├── rfc0025_constraint_traits.md
│ │ │ ├── rfc0026_client_crate_organization.md
│ │ │ ├── rfc0027_endpoints_20.md
│ │ │ ├── rfc0028_sdk_credential_cache_type_safety.md
│ │ │ ├── rfc0029_new_home_for_cred_types.md
│ │ │ ├── rfc0030_serialization_and_deserialization.md
│ │ │ ├── rfc0031_providing_fallback_credentials_on_timeout.md
│ │ │ ├── rfc0032_better_constraint_violations.md
│ │ │ ├── rfc0033_improve_sdk_request_id_access.md
│ │ │ ├── rfc0034_smithy_orchestrator.md
│ │ │ ├── rfc0035_collection_defaults.md
│ │ │ ├── rfc0036_http_dep_elimination.md
│ │ │ ├── rfc0037_http_wrapper.md
│ │ │ ├── rfc0038_retry_classifier_customization.md
│ │ │ ├── rfc0039_forward_compatible_errors.md
│ │ │ ├── rfc0040_behavior_versions.md
│ │ │ ├── rfc0041_improve_client_error_ergonomics.md
│ │ │ ├── rfc0042_file_per_change_changelog.md
│ │ │ ├── rfc0043_identity_cache_partitions.md
│ │ │ ├── rfc0044_env_defined_service_config.md
│ │ │ ├── rfc0045_configurable_serde.md
│ │ │ ├── rfc0046_server_request_metrics.md
│ │ │ └── rfc_template.md
│ │ ├── server/
│ │ │ ├── anatomy.md
│ │ │ ├── code_generation.md
│ │ │ ├── from_parts.md
│ │ │ ├── instrumentation.md
│ │ │ ├── middleware.md
│ │ │ ├── overview.md
│ │ │ └── validation_exceptions.md
│ │ ├── smithy/
│ │ │ ├── aggregate_shapes.md
│ │ │ ├── backwards-compat.md
│ │ │ ├── event_streams.md
│ │ │ ├── overview.md
│ │ │ ├── recursive_shapes.md
│ │ │ └── simple_shapes.md
│ │ └── tenets.md
│ └── static/
│ └── mermaid-init.js
├── examples/
│ ├── .gitignore
│ ├── BENCHMARKS.md
│ ├── Cargo.toml
│ ├── Makefile
│ ├── README.md
│ ├── legacy/
│ │ ├── .gitignore
│ │ ├── Cargo.toml
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── pokemon-service/
│ │ │ ├── Cargo.toml
│ │ │ ├── src/
│ │ │ │ ├── authz.rs
│ │ │ │ ├── lib.rs
│ │ │ │ ├── main.rs
│ │ │ │ └── plugin.rs
│ │ │ └── tests/
│ │ │ ├── common/
│ │ │ │ └── mod.rs
│ │ │ ├── event_streaming.rs
│ │ │ └── simple.rs
│ │ ├── pokemon-service-client-usage/
│ │ │ ├── Cargo.toml
│ │ │ ├── README.md
│ │ │ ├── examples/
│ │ │ │ ├── client-connector.rs
│ │ │ │ ├── custom-header-using-interceptor.rs
│ │ │ │ ├── custom-header.rs
│ │ │ │ ├── endpoint-resolver.rs
│ │ │ │ ├── handling-errors.rs
│ │ │ │ ├── mock-request.rs
│ │ │ │ ├── response-header-interceptor.rs
│ │ │ │ ├── retry-classifier.rs
│ │ │ │ ├── retry-customize.rs
│ │ │ │ ├── simple-client.rs
│ │ │ │ ├── timeout-config.rs
│ │ │ │ ├── trace-serialize.rs
│ │ │ │ └── use-config-bag.rs
│ │ │ └── src/
│ │ │ └── lib.rs
│ │ ├── pokemon-service-common/
│ │ │ ├── Cargo.toml
│ │ │ ├── src/
│ │ │ │ └── lib.rs
│ │ │ └── tests/
│ │ │ └── plugins_execution_order.rs
│ │ ├── pokemon-service-lambda/
│ │ │ ├── Cargo.toml
│ │ │ ├── src/
│ │ │ │ ├── lib.rs
│ │ │ │ └── main.rs
│ │ │ └── tests/
│ │ │ └── fixtures/
│ │ │ └── example-apigw-request.json
│ │ └── pokemon-service-tls/
│ │ ├── Cargo.toml
│ │ ├── src/
│ │ │ ├── lib.rs
│ │ │ └── main.rs
│ │ └── tests/
│ │ ├── common/
│ │ │ └── mod.rs
│ │ ├── custom_connectors.rs
│ │ └── testdata/
│ │ ├── localhost.crt
│ │ └── localhost.key
│ ├── pokemon-service/
│ │ ├── Cargo.toml
│ │ ├── cargo
│ │ ├── src/
│ │ │ ├── authz.rs
│ │ │ ├── lib.rs
│ │ │ ├── main.rs
│ │ │ └── plugin.rs
│ │ └── tests/
│ │ ├── common/
│ │ │ └── mod.rs
│ │ ├── event_streaming.rs
│ │ ├── metrics_test.rs
│ │ ├── simple.rs
│ │ └── snapshots/
│ │ └── metrics_test__metrics_content_via_tcp.snap
│ ├── pokemon-service-client-usage/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ ├── examples/
│ │ │ ├── client-connector.rs
│ │ │ ├── custom-header-using-interceptor.rs
│ │ │ ├── custom-header.rs
│ │ │ ├── endpoint-resolver.rs
│ │ │ ├── handling-errors.rs
│ │ │ ├── mock-request.rs
│ │ │ ├── response-header-interceptor.rs
│ │ │ ├── retry-classifier.rs
│ │ │ ├── retry-customize.rs
│ │ │ ├── simple-client.rs
│ │ │ ├── timeout-config.rs
│ │ │ ├── trace-serialize.rs
│ │ │ └── use-config-bag.rs
│ │ └── src/
│ │ └── lib.rs
│ ├── pokemon-service-common/
│ │ ├── Cargo.toml
│ │ ├── src/
│ │ │ ├── lib.rs
│ │ │ └── metrics.rs
│ │ └── tests/
│ │ └── plugins_execution_order.rs
│ ├── pokemon-service-lambda/
│ │ ├── Cargo.toml
│ │ ├── src/
│ │ │ ├── lib.rs
│ │ │ └── main.rs
│ │ └── tests/
│ │ └── fixtures/
│ │ └── example-apigw-request.json
│ ├── pokemon-service-tls/
│ │ ├── Cargo.toml
│ │ ├── src/
│ │ │ ├── lib.rs
│ │ │ └── main.rs
│ │ └── tests/
│ │ ├── common/
│ │ │ └── mod.rs
│ │ ├── custom_connectors.rs
│ │ └── testdata/
│ │ ├── localhost.crt
│ │ └── localhost.key
│ └── python/
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── Makefile
│ ├── README.md
│ ├── mypy.ini
│ ├── pokemon-service-test/
│ │ ├── Cargo.toml
│ │ └── tests/
│ │ ├── helpers.rs
│ │ ├── simple_integration_test.rs
│ │ └── testdata/
│ │ ├── localhost.crt
│ │ └── localhost.key
│ └── pokemon_service.py
├── fuzzgen/
│ ├── build.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── kotlin/
│ │ │ └── software/
│ │ │ └── amazon/
│ │ │ └── smithy/
│ │ │ └── rust/
│ │ │ └── codegen/
│ │ │ └── fuzz/
│ │ │ ├── FuzzHarnessBuildPlugin.kt
│ │ │ └── FuzzTargetGenerator.kt
│ │ └── resources/
│ │ └── META-INF/
│ │ └── services/
│ │ └── software.amazon.smithy.build.SmithyBuildPlugin
│ └── test/
│ └── kotlin/
│ └── software/
│ └── amazon/
│ └── smithy/
│ └── rust/
│ └── codegen/
│ └── fuzz/
│ └── FuzzHarnessBuildPluginTest.kt
├── gradle/
│ ├── libs.versions.toml
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── rust-runtime/
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── aws-smithy-async/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── external-types.toml
│ │ └── src/
│ │ ├── future/
│ │ │ ├── mod.rs
│ │ │ ├── never.rs
│ │ │ ├── now_or_later.rs
│ │ │ ├── pagination_stream/
│ │ │ │ ├── collect.rs
│ │ │ │ └── fn_stream.rs
│ │ │ ├── pagination_stream.rs
│ │ │ ├── rendezvous.rs
│ │ │ └── timeout.rs
│ │ ├── lib.rs
│ │ ├── rt/
│ │ │ ├── mod.rs
│ │ │ └── sleep.rs
│ │ ├── test_util/
│ │ │ ├── controlled_sleep.rs
│ │ │ ├── instant_sleep.rs
│ │ │ ├── manual_time.rs
│ │ │ └── tick_advance_sleep.rs
│ │ ├── test_util.rs
│ │ └── time.rs
│ ├── aws-smithy-cbor/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── benches/
│ │ │ ├── blob.rs
│ │ │ └── string.rs
│ │ └── src/
│ │ ├── data.rs
│ │ ├── decode.rs
│ │ ├── encode.rs
│ │ └── lib.rs
│ ├── aws-smithy-checksums/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── external-types.toml
│ │ └── src/
│ │ ├── body/
│ │ │ ├── cache.rs
│ │ │ ├── calculate.rs
│ │ │ └── validate.rs
│ │ ├── body.rs
│ │ ├── error.rs
│ │ ├── http.rs
│ │ └── lib.rs
│ ├── aws-smithy-compression/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── external-types.toml
│ │ ├── src/
│ │ │ ├── body.rs
│ │ │ ├── gzip.rs
│ │ │ ├── http.rs
│ │ │ └── lib.rs
│ │ └── test-data/
│ │ └── gettysburg_address.txt
│ ├── aws-smithy-dns/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── src/
│ │ │ ├── hickory.rs
│ │ │ └── lib.rs
│ │ └── tests/
│ │ └── hickory.rs
│ ├── aws-smithy-eventstream/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── benches/
│ │ │ └── write_message_performance.rs
│ │ ├── external-types.toml
│ │ ├── fuzz/
│ │ │ ├── .gitignore
│ │ │ ├── Cargo.toml
│ │ │ └── fuzz_targets/
│ │ │ ├── corrected_prelude_crc.rs
│ │ │ ├── mutated_headers.rs
│ │ │ ├── prelude.rs
│ │ │ ├── raw_bytes.rs
│ │ │ └── round_trip.rs
│ │ ├── src/
│ │ │ ├── arbitrary.rs
│ │ │ ├── buf/
│ │ │ │ ├── count.rs
│ │ │ │ └── crc.rs
│ │ │ ├── buf.rs
│ │ │ ├── error.rs
│ │ │ ├── frame.rs
│ │ │ ├── lib.rs
│ │ │ ├── message_size_hint.rs
│ │ │ ├── smithy.rs
│ │ │ └── test_util.rs
│ │ └── test_data/
│ │ ├── invalid_header_name_length
│ │ ├── invalid_header_name_length_too_long
│ │ ├── invalid_header_string_length_cut_off
│ │ ├── invalid_header_string_value_length
│ │ ├── invalid_header_value_type
│ │ ├── invalid_headers_length
│ │ ├── invalid_message_checksum
│ │ ├── invalid_prelude_checksum
│ │ ├── valid_empty_payload
│ │ ├── valid_no_headers
│ │ └── valid_with_all_headers_and_payload
│ ├── aws-smithy-experimental/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── src/
│ │ └── lib.rs
│ ├── aws-smithy-fuzz/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── src/
│ │ │ ├── lib.rs
│ │ │ ├── main.rs
│ │ │ └── types.rs
│ │ └── templates/
│ │ ├── smithy-build-fuzzer.jinja2
│ │ └── smithy-build-targetcrate.jinja2
│ ├── aws-smithy-http/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── external-types.toml
│ │ ├── fuzz/
│ │ │ ├── .gitignore
│ │ │ ├── Cargo.toml
│ │ │ └── fuzz_targets/
│ │ │ └── read_many_from_str.rs
│ │ ├── proptest-regressions/
│ │ │ ├── event_stream/
│ │ │ │ └── receiver.txt
│ │ │ ├── label.txt
│ │ │ └── query.txt
│ │ └── src/
│ │ ├── endpoint/
│ │ │ └── error.rs
│ │ ├── endpoint.rs
│ │ ├── event_stream/
│ │ │ ├── receiver.rs
│ │ │ └── sender.rs
│ │ ├── event_stream.rs
│ │ ├── futures_stream_adapter.rs
│ │ ├── header.rs
│ │ ├── label.rs
│ │ ├── lib.rs
│ │ ├── operation.rs
│ │ ├── query.rs
│ │ ├── query_writer.rs
│ │ └── urlencode.rs
│ ├── aws-smithy-http-client/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── examples/
│ │ │ ├── client-aws-lc.rs
│ │ │ ├── client-ring.rs
│ │ │ ├── client-s2n-tls.rs
│ │ │ └── custom-dns.rs
│ │ ├── external-types.toml
│ │ ├── src/
│ │ │ ├── client/
│ │ │ │ ├── connect.rs
│ │ │ │ ├── dns.rs
│ │ │ │ ├── proxy.rs
│ │ │ │ ├── timeout.rs
│ │ │ │ ├── tls/
│ │ │ │ │ ├── rustls_provider.rs
│ │ │ │ │ └── s2n_tls_provider.rs
│ │ │ │ └── tls.rs
│ │ │ ├── client.rs
│ │ │ ├── error.rs
│ │ │ ├── hyper_legacy.rs
│ │ │ ├── lib.rs
│ │ │ ├── test_util/
│ │ │ │ ├── body.rs
│ │ │ │ ├── capture_request.rs
│ │ │ │ ├── dvr/
│ │ │ │ │ ├── record.rs
│ │ │ │ │ └── replay.rs
│ │ │ │ ├── dvr.rs
│ │ │ │ ├── infallible.rs
│ │ │ │ ├── legacy_infallible.rs
│ │ │ │ ├── never.rs
│ │ │ │ ├── replay.rs
│ │ │ │ └── wire.rs
│ │ │ └── test_util.rs
│ │ ├── test-data/
│ │ │ └── example.com.json
│ │ └── tests/
│ │ ├── openssl.cnf
│ │ ├── proxy_tests.rs
│ │ ├── regen-certificates.sh
│ │ ├── server.pem
│ │ ├── server.rsa
│ │ ├── smoke_test_clients.rs
│ │ └── tls.rs
│ ├── aws-smithy-http-server/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── examples/
│ │ │ ├── basic_server.rs
│ │ │ ├── custom_accept_loop.rs
│ │ │ └── request_id.rs
│ │ ├── rustfmt.toml
│ │ ├── src/
│ │ │ ├── body.rs
│ │ │ ├── error.rs
│ │ │ ├── extension.rs
│ │ │ ├── instrumentation/
│ │ │ │ ├── mod.rs
│ │ │ │ ├── plugin.rs
│ │ │ │ ├── sensitivity/
│ │ │ │ │ ├── headers.rs
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ ├── request.rs
│ │ │ │ │ ├── response.rs
│ │ │ │ │ ├── sensitive.rs
│ │ │ │ │ └── uri/
│ │ │ │ │ ├── label.rs
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ └── query.rs
│ │ │ │ └── service.rs
│ │ │ ├── layer/
│ │ │ │ ├── alb_health_check.rs
│ │ │ │ └── mod.rs
│ │ │ ├── lib.rs
│ │ │ ├── macros.rs
│ │ │ ├── operation/
│ │ │ │ ├── handler.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── operation_service.rs
│ │ │ │ ├── shape.rs
│ │ │ │ └── upgrade.rs
│ │ │ ├── plugin/
│ │ │ │ ├── closure.rs
│ │ │ │ ├── either.rs
│ │ │ │ ├── filter.rs
│ │ │ │ ├── http_plugins.rs
│ │ │ │ ├── identity.rs
│ │ │ │ ├── layer.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── model_plugins.rs
│ │ │ │ ├── scoped.rs
│ │ │ │ └── stack.rs
│ │ │ ├── protocol/
│ │ │ │ ├── aws_json/
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ ├── rejection.rs
│ │ │ │ │ ├── router.rs
│ │ │ │ │ └── runtime_error.rs
│ │ │ │ ├── aws_json_10/
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ └── router.rs
│ │ │ │ ├── aws_json_11/
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ └── router.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── rest/
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ └── router.rs
│ │ │ │ ├── rest_json_1/
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ ├── rejection.rs
│ │ │ │ │ ├── router.rs
│ │ │ │ │ └── runtime_error.rs
│ │ │ │ ├── rest_xml/
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ ├── rejection.rs
│ │ │ │ │ ├── router.rs
│ │ │ │ │ └── runtime_error.rs
│ │ │ │ └── rpc_v2_cbor/
│ │ │ │ ├── mod.rs
│ │ │ │ ├── rejection.rs
│ │ │ │ ├── router.rs
│ │ │ │ └── runtime_error.rs
│ │ │ ├── rejection.rs
│ │ │ ├── request/
│ │ │ │ ├── connect_info.rs
│ │ │ │ ├── extension.rs
│ │ │ │ ├── lambda.rs
│ │ │ │ ├── mod.rs
│ │ │ │ └── request_id.rs
│ │ │ ├── response.rs
│ │ │ ├── routing/
│ │ │ │ ├── into_make_service.rs
│ │ │ │ ├── into_make_service_with_connect_info.rs
│ │ │ │ ├── lambda_handler.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── request_spec.rs
│ │ │ │ ├── route.rs
│ │ │ │ └── tiny_map.rs
│ │ │ ├── runtime_error.rs
│ │ │ ├── serve/
│ │ │ │ ├── listener.rs
│ │ │ │ └── mod.rs
│ │ │ ├── service.rs
│ │ │ ├── shape_id.rs
│ │ │ └── test_helpers.rs
│ │ └── tests/
│ │ ├── graceful_shutdown_test.rs
│ │ └── serve_integration_test.rs
│ ├── aws-smithy-http-server-metrics/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── src/
│ │ ├── default/
│ │ │ └── service_counter.rs
│ │ ├── default.rs
│ │ ├── layer/
│ │ │ └── builder.rs
│ │ ├── layer.rs
│ │ ├── lib.rs
│ │ ├── operation.rs
│ │ ├── plugin.rs
│ │ ├── service.rs
│ │ ├── traits.rs
│ │ └── types.rs
│ ├── aws-smithy-http-server-metrics-macro/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── src/
│ │ ├── lib.rs
│ │ └── macro_impl.rs
│ ├── aws-smithy-http-server-python/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── src/
│ │ │ ├── context/
│ │ │ │ ├── lambda.rs
│ │ │ │ ├── layer.rs
│ │ │ │ └── testing.rs
│ │ │ ├── context.rs
│ │ │ ├── error.rs
│ │ │ ├── lambda.rs
│ │ │ ├── lib.rs
│ │ │ ├── logging.rs
│ │ │ ├── middleware/
│ │ │ │ ├── error.rs
│ │ │ │ ├── handler.rs
│ │ │ │ ├── header_map.rs
│ │ │ │ ├── layer.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── pytests/
│ │ │ │ │ ├── harness.rs
│ │ │ │ │ ├── layer.rs
│ │ │ │ │ ├── request.rs
│ │ │ │ │ └── response.rs
│ │ │ │ ├── request.rs
│ │ │ │ └── response.rs
│ │ │ ├── pytests/
│ │ │ │ ├── bytestream.rs
│ │ │ │ └── harness.rs
│ │ │ ├── server.rs
│ │ │ ├── socket.rs
│ │ │ ├── tls/
│ │ │ │ └── listener.rs
│ │ │ ├── tls.rs
│ │ │ ├── types.rs
│ │ │ ├── util/
│ │ │ │ ├── collection.rs
│ │ │ │ └── error.rs
│ │ │ └── util.rs
│ │ ├── stubgen.py
│ │ ├── stubgen.sh
│ │ └── stubgen_test.py
│ ├── aws-smithy-http-server-typescript/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── examples/
│ │ │ ├── .gitignore
│ │ │ ├── Cargo.toml
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ └── pokemon-service.ts
│ │ └── src/
│ │ └── lib.rs
│ ├── aws-smithy-json/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── TESTING.md
│ │ ├── external-types.toml
│ │ ├── fuzz/
│ │ │ ├── .gitignore
│ │ │ ├── Cargo.toml
│ │ │ ├── fuzz_targets/
│ │ │ │ ├── common.rs
│ │ │ │ ├── json_deserialize.rs
│ │ │ │ └── json_deserialize_corpus_cov.rs
│ │ │ └── show-corpus-coverage.sh
│ │ ├── proptest-regressions/
│ │ │ ├── deserialize/
│ │ │ │ └── token.txt
│ │ │ └── deserialize.txt
│ │ └── src/
│ │ ├── deserialize/
│ │ │ ├── error.rs
│ │ │ └── token.rs
│ │ ├── deserialize.rs
│ │ ├── escape.rs
│ │ ├── lib.rs
│ │ └── serialize.rs
│ ├── aws-smithy-legacy-http/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── external-types.toml
│ │ ├── fuzz/
│ │ │ ├── .gitignore
│ │ │ ├── Cargo.toml
│ │ │ └── fuzz_targets/
│ │ │ └── read_many_from_str.rs
│ │ ├── proptest-regressions/
│ │ │ ├── label.txt
│ │ │ └── query.txt
│ │ └── src/
│ │ ├── endpoint/
│ │ │ └── error.rs
│ │ ├── endpoint.rs
│ │ ├── event_stream/
│ │ │ ├── receiver.rs
│ │ │ └── sender.rs
│ │ ├── event_stream.rs
│ │ ├── futures_stream_adapter.rs
│ │ ├── header.rs
│ │ ├── label.rs
│ │ ├── lib.rs
│ │ ├── operation.rs
│ │ ├── query.rs
│ │ ├── query_writer.rs
│ │ └── urlencode.rs
│ ├── aws-smithy-legacy-http-server/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── rustfmt.toml
│ │ └── src/
│ │ ├── body.rs
│ │ ├── error.rs
│ │ ├── extension.rs
│ │ ├── instrumentation/
│ │ │ ├── mod.rs
│ │ │ ├── plugin.rs
│ │ │ ├── sensitivity/
│ │ │ │ ├── headers.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── request.rs
│ │ │ │ ├── response.rs
│ │ │ │ ├── sensitive.rs
│ │ │ │ └── uri/
│ │ │ │ ├── label.rs
│ │ │ │ ├── mod.rs
│ │ │ │ └── query.rs
│ │ │ └── service.rs
│ │ ├── layer/
│ │ │ ├── alb_health_check.rs
│ │ │ └── mod.rs
│ │ ├── lib.rs
│ │ ├── macros.rs
│ │ ├── operation/
│ │ │ ├── handler.rs
│ │ │ ├── mod.rs
│ │ │ ├── operation_service.rs
│ │ │ ├── shape.rs
│ │ │ └── upgrade.rs
│ │ ├── plugin/
│ │ │ ├── closure.rs
│ │ │ ├── either.rs
│ │ │ ├── filter.rs
│ │ │ ├── http_plugins.rs
│ │ │ ├── identity.rs
│ │ │ ├── layer.rs
│ │ │ ├── mod.rs
│ │ │ ├── model_plugins.rs
│ │ │ ├── scoped.rs
│ │ │ └── stack.rs
│ │ ├── protocol/
│ │ │ ├── aws_json/
│ │ │ │ ├── mod.rs
│ │ │ │ ├── rejection.rs
│ │ │ │ ├── router.rs
│ │ │ │ └── runtime_error.rs
│ │ │ ├── aws_json_10/
│ │ │ │ ├── mod.rs
│ │ │ │ └── router.rs
│ │ │ ├── aws_json_11/
│ │ │ │ ├── mod.rs
│ │ │ │ └── router.rs
│ │ │ ├── mod.rs
│ │ │ ├── rest/
│ │ │ │ ├── mod.rs
│ │ │ │ └── router.rs
│ │ │ ├── rest_json_1/
│ │ │ │ ├── mod.rs
│ │ │ │ ├── rejection.rs
│ │ │ │ ├── router.rs
│ │ │ │ └── runtime_error.rs
│ │ │ ├── rest_xml/
│ │ │ │ ├── mod.rs
│ │ │ │ ├── rejection.rs
│ │ │ │ ├── router.rs
│ │ │ │ └── runtime_error.rs
│ │ │ └── rpc_v2_cbor/
│ │ │ ├── mod.rs
│ │ │ ├── rejection.rs
│ │ │ ├── router.rs
│ │ │ └── runtime_error.rs
│ │ ├── rejection.rs
│ │ ├── request/
│ │ │ ├── connect_info.rs
│ │ │ ├── extension.rs
│ │ │ ├── lambda.rs
│ │ │ ├── mod.rs
│ │ │ └── request_id.rs
│ │ ├── response.rs
│ │ ├── routing/
│ │ │ ├── into_make_service.rs
│ │ │ ├── into_make_service_with_connect_info.rs
│ │ │ ├── lambda_handler.rs
│ │ │ ├── mod.rs
│ │ │ ├── request_spec.rs
│ │ │ ├── route.rs
│ │ │ └── tiny_map.rs
│ │ ├── runtime_error.rs
│ │ ├── service.rs
│ │ ├── shape_id.rs
│ │ └── test_helpers.rs
│ ├── aws-smithy-mocks/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── src/
│ │ │ ├── interceptor.rs
│ │ │ ├── lib.rs
│ │ │ └── rule.rs
│ │ └── tests/
│ │ └── macros.rs
│ ├── aws-smithy-observability/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── external-types.toml
│ │ └── src/
│ │ ├── attributes.rs
│ │ ├── context.rs
│ │ ├── error.rs
│ │ ├── global.rs
│ │ ├── instruments.rs
│ │ ├── lib.rs
│ │ ├── meter.rs
│ │ ├── noop.rs
│ │ └── provider.rs
│ ├── aws-smithy-observability-otel/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── benches/
│ │ │ ├── async_instruments.rs
│ │ │ └── sync_instruments.rs
│ │ ├── external-types.toml
│ │ └── src/
│ │ ├── attributes.rs
│ │ ├── lib.rs
│ │ └── meter.rs
│ ├── aws-smithy-protocol-test/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── src/
│ │ ├── lib.rs
│ │ ├── urlencoded.rs
│ │ └── xml.rs
│ ├── aws-smithy-query/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── external-types.toml
│ │ └── src/
│ │ └── lib.rs
│ ├── aws-smithy-runtime/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── external-types.toml
│ │ ├── src/
│ │ │ ├── client/
│ │ │ │ ├── auth/
│ │ │ │ │ ├── http.rs
│ │ │ │ │ └── no_auth.rs
│ │ │ │ ├── auth.rs
│ │ │ │ ├── config_override.rs
│ │ │ │ ├── defaults.rs
│ │ │ │ ├── dns.rs
│ │ │ │ ├── endpoint.rs
│ │ │ │ ├── http/
│ │ │ │ │ ├── body/
│ │ │ │ │ │ ├── content_length_enforcement.rs
│ │ │ │ │ │ ├── minimum_throughput/
│ │ │ │ │ │ │ ├── http_body_0_4_x.rs
│ │ │ │ │ │ │ ├── http_body_1_x.rs
│ │ │ │ │ │ │ ├── options.rs
│ │ │ │ │ │ │ └── throughput.rs
│ │ │ │ │ │ └── minimum_throughput.rs
│ │ │ │ │ ├── body.rs
│ │ │ │ │ └── connection_poisoning.rs
│ │ │ │ ├── http.rs
│ │ │ │ ├── identity/
│ │ │ │ │ ├── cache/
│ │ │ │ │ │ └── lazy.rs
│ │ │ │ │ ├── cache.rs
│ │ │ │ │ └── no_auth.rs
│ │ │ │ ├── identity.rs
│ │ │ │ ├── interceptors.rs
│ │ │ │ ├── metrics.rs
│ │ │ │ ├── orchestrator/
│ │ │ │ │ ├── auth.rs
│ │ │ │ │ ├── endpoints.rs
│ │ │ │ │ ├── http.rs
│ │ │ │ │ └── operation.rs
│ │ │ │ ├── orchestrator.rs
│ │ │ │ ├── retries/
│ │ │ │ │ ├── classifiers.rs
│ │ │ │ │ ├── client_rate_limiter.rs
│ │ │ │ │ ├── strategy/
│ │ │ │ │ │ ├── never.rs
│ │ │ │ │ │ └── standard.rs
│ │ │ │ │ ├── strategy.rs
│ │ │ │ │ └── token_bucket.rs
│ │ │ │ ├── retries.rs
│ │ │ │ ├── sdk_feature.rs
│ │ │ │ ├── stalled_stream_protection.rs
│ │ │ │ ├── test_util/
│ │ │ │ │ ├── deserializer.rs
│ │ │ │ │ └── serializer.rs
│ │ │ │ ├── test_util.rs
│ │ │ │ ├── timeout.rs
│ │ │ │ ├── waiters/
│ │ │ │ │ └── backoff.rs
│ │ │ │ └── waiters.rs
│ │ │ ├── client.rs
│ │ │ ├── expiring_cache.rs
│ │ │ ├── lib.rs
│ │ │ ├── static_partition_map.rs
│ │ │ ├── test_util/
│ │ │ │ ├── assertions.rs
│ │ │ │ └── capture_test_logs.rs
│ │ │ └── test_util.rs
│ │ └── tests/
│ │ ├── reconnect_on_transient_error.rs
│ │ ├── retries.rs
│ │ ├── stalled_stream_common.rs
│ │ ├── stalled_stream_download.rs
│ │ ├── stalled_stream_performance.rs
│ │ └── stalled_stream_upload.rs
│ ├── aws-smithy-runtime-api/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── external-types-no-http.toml
│ │ ├── external-types.toml
│ │ ├── rustdoc/
│ │ │ ├── validate_base_client_config.md
│ │ │ └── validate_final_config.md
│ │ ├── src/
│ │ │ ├── box_error.rs
│ │ │ ├── client/
│ │ │ │ ├── auth/
│ │ │ │ │ ├── http.rs
│ │ │ │ │ └── static_resolver.rs
│ │ │ │ ├── auth.rs
│ │ │ │ ├── behavior_version.rs
│ │ │ │ ├── connection.rs
│ │ │ │ ├── connector_metadata.rs
│ │ │ │ ├── dns.rs
│ │ │ │ ├── endpoint.rs
│ │ │ │ ├── http.rs
│ │ │ │ ├── identity/
│ │ │ │ │ └── http.rs
│ │ │ │ ├── identity.rs
│ │ │ │ ├── interceptors/
│ │ │ │ │ ├── context/
│ │ │ │ │ │ ├── phase.rs
│ │ │ │ │ │ └── wrappers.rs
│ │ │ │ │ ├── context.rs
│ │ │ │ │ └── error.rs
│ │ │ │ ├── interceptors.rs
│ │ │ │ ├── orchestrator.rs
│ │ │ │ ├── result.rs
│ │ │ │ ├── retries/
│ │ │ │ │ └── classifiers.rs
│ │ │ │ ├── retries.rs
│ │ │ │ ├── runtime_components.rs
│ │ │ │ ├── runtime_plugin.rs
│ │ │ │ ├── ser_de.rs
│ │ │ │ ├── stalled_stream_protection.rs
│ │ │ │ └── waiters.rs
│ │ │ ├── client.rs
│ │ │ ├── http/
│ │ │ │ ├── error.rs
│ │ │ │ ├── extensions.rs
│ │ │ │ ├── headers.rs
│ │ │ │ ├── request.rs
│ │ │ │ └── response.rs
│ │ │ ├── http.rs
│ │ │ ├── lib.rs
│ │ │ └── shared.rs
│ │ └── tests/
│ │ ├── dyn_dispatch_hint.rs
│ │ └── permanent_interceptor.rs
│ ├── aws-smithy-runtime-api-macros/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── src/
│ │ └── lib.rs
│ ├── aws-smithy-types/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── benches/
│ │ │ └── base64.rs
│ │ ├── external-types.toml
│ │ ├── fuzz/
│ │ │ ├── .gitignore
│ │ │ ├── Cargo.toml
│ │ │ └── fuzz_targets/
│ │ │ ├── parse_date_time.rs
│ │ │ ├── parse_epoch_seconds.rs
│ │ │ ├── parse_http_date.rs
│ │ │ ├── read_date_time.rs
│ │ │ └── read_http_date.rs
│ │ ├── proptest-regressions/
│ │ │ └── instant/
│ │ │ └── format.txt
│ │ ├── src/
│ │ │ ├── base64.rs
│ │ │ ├── big_number.rs
│ │ │ ├── blob.rs
│ │ │ ├── body/
│ │ │ │ ├── http_body_0_4_x.rs
│ │ │ │ └── http_body_1_x.rs
│ │ │ ├── body.rs
│ │ │ ├── byte_stream/
│ │ │ │ ├── bytestream_util/
│ │ │ │ │ ├── http_body_0_4_x.rs
│ │ │ │ │ └── http_body_1_x.rs
│ │ │ │ ├── bytestream_util.rs
│ │ │ │ ├── error.rs
│ │ │ │ ├── http_body_0_4_x.rs
│ │ │ │ └── http_body_1_x.rs
│ │ │ ├── byte_stream.rs
│ │ │ ├── checksum_config.rs
│ │ │ ├── config_bag/
│ │ │ │ ├── storable.rs
│ │ │ │ └── typeid_map.rs
│ │ │ ├── config_bag.rs
│ │ │ ├── date_time/
│ │ │ │ ├── de.rs
│ │ │ │ ├── format.rs
│ │ │ │ ├── mod.rs
│ │ │ │ └── ser.rs
│ │ │ ├── document.rs
│ │ │ ├── endpoint.rs
│ │ │ ├── error/
│ │ │ │ ├── display.rs
│ │ │ │ ├── metadata.rs
│ │ │ │ └── operation.rs
│ │ │ ├── error.rs
│ │ │ ├── event_stream.rs
│ │ │ ├── lib.rs
│ │ │ ├── number.rs
│ │ │ ├── primitive.rs
│ │ │ ├── retry.rs
│ │ │ ├── str_bytes.rs
│ │ │ ├── timeout.rs
│ │ │ └── type_erasure.rs
│ │ └── test_data/
│ │ ├── date_time_format_test_suite.json
│ │ └── serialize_document.json
│ ├── aws-smithy-types-convert/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── external-types.toml
│ │ └── src/
│ │ ├── date_time.rs
│ │ ├── lib.rs
│ │ └── stream.rs
│ ├── aws-smithy-wasm/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── external-types.toml
│ │ └── src/
│ │ ├── lib.rs
│ │ └── wasi.rs
│ ├── aws-smithy-xml/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── external-types.toml
│ │ ├── src/
│ │ │ ├── decode.rs
│ │ │ ├── encode.rs
│ │ │ ├── escape.rs
│ │ │ ├── lib.rs
│ │ │ └── unescape.rs
│ │ └── tests/
│ │ ├── handwritten_parsers.rs
│ │ └── handwritten_serializers.rs
│ ├── build.gradle.kts
│ ├── clippy.toml
│ └── inlineable/
│ ├── Cargo.toml
│ ├── LICENSE
│ ├── README.md
│ ├── external-types.toml
│ └── src/
│ ├── auth_plugin.rs
│ ├── aws_query_compatible_errors.rs
│ ├── cbor_errors.rs
│ ├── client_http_checksum_required.rs
│ ├── client_idempotency_token.rs
│ ├── client_request_compression.rs
│ ├── constrained.rs
│ ├── ec2_query_errors.rs
│ ├── endpoint_lib/
│ │ ├── arn.rs
│ │ ├── bdd_interpreter.rs
│ │ ├── coalesce.rs
│ │ ├── diagnostic.rs
│ │ ├── host.rs
│ │ ├── ite.rs
│ │ ├── parse_url.rs
│ │ ├── partition.rs
│ │ ├── s3.rs
│ │ ├── split.rs
│ │ ├── substring.rs
│ │ └── uri_encode.rs
│ ├── endpoint_lib.rs
│ ├── event_receiver.rs
│ ├── http_checksum_required.rs
│ ├── idempotency_token.rs
│ ├── json_errors.rs
│ ├── lib.rs
│ ├── rest_xml_unwrapped_errors.rs
│ ├── rest_xml_wrapped_errors.rs
│ ├── sdk_feature_tracker.rs
│ └── serialization_settings.rs
├── rust-toolchain.toml
├── settings.gradle.kts
└── tools/
├── .cargo/
│ └── config.toml
├── __init__.py
├── ci-build/
│ ├── .dockerignore
│ ├── Dockerfile
│ ├── README.md
│ ├── add-local-user.dockerfile
│ ├── build.docker-compose.yml
│ ├── changelogger/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ ├── smithy-rs-maintainers.txt
│ │ ├── src/
│ │ │ ├── entry.rs
│ │ │ ├── lib.rs
│ │ │ ├── ls.rs
│ │ │ ├── main.rs
│ │ │ ├── new.rs
│ │ │ ├── render.rs
│ │ │ └── split.rs
│ │ └── tests/
│ │ └── e2e_test.rs
│ ├── ci-action
│ ├── ci-create-workspace
│ ├── crate-hasher/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ ├── src/
│ │ │ ├── file_list.rs
│ │ │ ├── lib.rs
│ │ │ └── main.rs
│ │ └── tests/
│ │ ├── aws-smithy-async-2022-04-08-entries.txt
│ │ └── test.rs
│ ├── difftags/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ └── src/
│ │ ├── difftags.css
│ │ ├── difftags.js
│ │ ├── html.rs
│ │ ├── main.rs
│ │ └── page.rs
│ ├── publisher/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ ├── fake_cargo/
│ │ │ ├── cargo_fails
│ │ │ ├── cargo_owner_list
│ │ │ ├── cargo_publish_already_published
│ │ │ ├── cargo_search_success
│ │ │ ├── cargo_success
│ │ │ └── cargo_yank_not_found
│ │ ├── src/
│ │ │ ├── cargo/
│ │ │ │ ├── add_owner.rs
│ │ │ │ ├── get_owners.rs
│ │ │ │ ├── publish.rs
│ │ │ │ ├── remove_owner.rs
│ │ │ │ └── yank.rs
│ │ │ ├── cargo.rs
│ │ │ ├── fs.rs
│ │ │ ├── lib.rs
│ │ │ ├── main.rs
│ │ │ ├── package.rs
│ │ │ ├── publish.rs
│ │ │ ├── sort.rs
│ │ │ ├── subcommand/
│ │ │ │ ├── claim_crate_names.rs
│ │ │ │ ├── fix_manifests/
│ │ │ │ │ └── validate.rs
│ │ │ │ ├── fix_manifests.rs
│ │ │ │ ├── generate_version_manifest.rs
│ │ │ │ ├── hydrate_readme.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── publish.rs
│ │ │ │ ├── tag_versions_manifest.rs
│ │ │ │ └── yank_release.rs
│ │ │ └── yank.rs
│ │ └── tests/
│ │ └── hydrate_readme_e2e_test.rs
│ ├── runtime-versioner/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ ├── src/
│ │ │ ├── command/
│ │ │ │ ├── audit.rs
│ │ │ │ └── patch.rs
│ │ │ ├── main.rs
│ │ │ ├── repo.rs
│ │ │ ├── tag.rs
│ │ │ └── util.rs
│ │ ├── test-common/
│ │ │ ├── Cargo.toml
│ │ │ └── src/
│ │ │ └── lib.rs
│ │ ├── test_data/
│ │ │ ├── .gitignore
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── already_published_version.toml
│ │ │ └── base_crates_io_index.toml
│ │ └── tests/
│ │ ├── test_audit.rs
│ │ └── test_previous_release_tag.rs
│ ├── sanity-test
│ ├── sdk-lints/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ └── src/
│ │ ├── anchor.rs
│ │ ├── changelog.rs
│ │ ├── copyright.rs
│ │ ├── lib_rs_attr.rs
│ │ ├── lint.rs
│ │ ├── lint_cargo_toml.rs
│ │ ├── main.rs
│ │ ├── readmes.rs
│ │ └── todos.rs
│ ├── sdk-lockfiles/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ ├── false-positives.txt
│ │ └── src/
│ │ ├── audit.rs
│ │ └── main.rs
│ ├── sdk-versioner/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ └── src/
│ │ └── main.rs
│ └── smithy-rs-tool-common/
│ ├── Cargo.toml
│ ├── README.md
│ ├── fake-cli/
│ │ ├── git-changed-files
│ │ ├── git-changed-files-empty
│ │ ├── git-clone
│ │ ├── git-commit
│ │ ├── git-commit-on-behalf
│ │ ├── git-create-branch
│ │ ├── git-current-branch-name
│ │ ├── git-delete-branch
│ │ ├── git-extract-commit-info
│ │ ├── git-get-head-revision
│ │ ├── git-reset-hard
│ │ ├── git-rev-list
│ │ ├── git-rev-list-path
│ │ ├── git-show
│ │ ├── git-squash-merge
│ │ ├── git-stage
│ │ ├── git-untracked-files
│ │ └── git-untracked-files-empty
│ └── src/
│ ├── changelog/
│ │ └── parser.rs
│ ├── changelog.rs
│ ├── ci.rs
│ ├── command.rs
│ ├── git.rs
│ ├── index.rs
│ ├── lib.rs
│ ├── macros.rs
│ ├── package.rs
│ ├── release_tag.rs
│ ├── retry.rs
│ ├── shell.rs
│ └── versions_manifest.rs
├── ci-cdk/
│ ├── .eslintrc.json
│ ├── .gitignore
│ ├── .npmignore
│ ├── .prettierrc
│ ├── LICENSE
│ ├── README.md
│ ├── bin/
│ │ ├── aws-sdk-rust/
│ │ │ ├── canary-only.ts
│ │ │ └── canary.ts
│ │ └── smithy-rs/
│ │ ├── canary-only.ts
│ │ └── ci-cdk.ts
│ ├── canary-lambda/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ └── src/
│ │ ├── benches/
│ │ │ ├── ec2_canary.rs
│ │ │ ├── mod.rs
│ │ │ ├── s3_canary.rs
│ │ │ └── sts_canary.rs
│ │ ├── canary.rs
│ │ ├── latest/
│ │ │ ├── paginator_canary.rs
│ │ │ ├── s3_canary.rs
│ │ │ ├── transcribe_canary.rs
│ │ │ └── wasm_canary.rs
│ │ ├── latest.rs
│ │ ├── main.rs
│ │ ├── release_2023_10_26/
│ │ │ ├── paginator_canary.rs
│ │ │ ├── s3_canary.rs
│ │ │ └── transcribe_canary.rs
│ │ └── release_2023_10_26.rs
│ ├── canary-runner/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── arch.rs
│ │ ├── bench.rs
│ │ ├── build_bundle.rs
│ │ ├── generate_matrix.rs
│ │ ├── main.rs
│ │ └── run.rs
│ ├── canary-wasm/
│ │ ├── .gitignore
│ │ ├── src/
│ │ │ └── lib.rs
│ │ └── wit/
│ │ └── component.wit
│ ├── cdk.json
│ ├── jest.config.js
│ ├── lib/
│ │ ├── canary-stack.ts
│ │ ├── constructs/
│ │ │ ├── cloudfront-s3-cdn.ts
│ │ │ └── github-oidc-role.ts
│ │ ├── oidc-provider-stack.ts
│ │ └── smithy-rs/
│ │ └── pull-request-cdn-stack.ts
│ ├── package.json
│ ├── test/
│ │ ├── constructs/
│ │ │ └── github-oidc-role.test.ts
│ │ └── oidc-provider-stack.test.ts
│ └── tsconfig.json
├── ci-resources/
│ └── tls-stub/
│ ├── Cargo.toml
│ ├── README.md
│ └── src/
│ └── main.rs
├── ci-scripts/
│ ├── additional-per-crate-checks.sh
│ ├── cargo-update-lockfiles
│ ├── check-aws-config
│ ├── check-aws-sdk-adhoc-tests
│ ├── check-aws-sdk-benchmarks
│ ├── check-aws-sdk-canary
│ ├── check-aws-sdk-cargo-deny
│ ├── check-aws-sdk-services
│ ├── check-aws-sdk-smoketest-docs-clippy-udeps
│ ├── check-aws-sdk-smoketest-unit-tests
│ ├── check-aws-sdk-standalone-integration-tests
│ ├── check-book
│ ├── check-client-codegen-integration-tests
│ ├── check-client-codegen-unit-tests
│ ├── check-codegen-version
│ ├── check-core-codegen-unit-tests
│ ├── check-deterministic-codegen
│ ├── check-fuzzgen
│ ├── check-only-aws-sdk-services
│ ├── check-rust-runtimes
│ ├── check-sdk-codegen-unit-tests
│ ├── check-semver
│ ├── check-semver-hazards
│ ├── check-serde-codegen-unit-tests
│ ├── check-server-codegen-integration-tests
│ ├── check-server-codegen-integration-tests-python
│ ├── check-server-codegen-unit-tests
│ ├── check-server-codegen-unit-tests-python
│ ├── check-server-e2e-test
│ ├── check-server-python-e2e-test
│ ├── check-style-and-lints
│ ├── check-tools
│ ├── codegen-diff/
│ │ ├── __init__.py
│ │ ├── check-deterministic-codegen.py
│ │ ├── codegen-diff-revisions.py
│ │ ├── diff_lib.py
│ │ └── semver-checks.py
│ ├── configure-tls/
│ │ ├── configure-badssl
│ │ ├── configure-badtls
│ │ ├── configure-trytls
│ │ ├── new-badssl-dockerfile
│ │ └── update-certs
│ ├── generate-aws-sdk
│ ├── generate-aws-sdk-for-canary
│ ├── generate-aws-sdk-smoketest
│ ├── generate-codegen-diff
│ ├── generate-doc-preview-index.sh
│ ├── generate-sdk-perf-bin
│ ├── generate-smithy-rs-release
│ ├── run-canary
│ └── test-windows.sh
└── echo-server/
├── Cargo.toml
├── README.md
└── src/
└── main.rs
================================================
FILE CONTENTS
================================================
================================================
FILE: .cargo/config.toml
================================================
[build]
# Share one `target` directory at the project root for all Cargo projects and workspaces in smithy-rs
target-dir = "target"
================================================
FILE: .cargo-deny-config.toml
================================================
# This is the config file for `cargo-deny` used in CI
# This section is considered when running `cargo deny check licenses`
# More documentation for the licenses section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/licenses/cfg.html
[licenses]
allow = [
# See https://spdx.org/licenses/ for list of possible licenses
# [possible values: any SPDX 3.11 short identifier (+ optional exception)].
"Apache-2.0 WITH LLVM-exception",
"Apache-2.0",
"BSD-3-Clause",
"ISC",
"MIT",
"MPL-2.0",
"Unicode-DFS-2016",
"Unicode-3.0",
"Zlib",
]
confidence-threshold = 1.0
exceptions = [
{ allow = ["OpenSSL"], name = "ring", version = "*" },
{ allow = ["OpenSSL"], name = "aws-lc-sys", version = "*" },
{ allow = ["OpenSSL"], name = "aws-lc-fips-sys", version = "*" },
{ allow = ["BlueOak-1.0.0"], name = "minicbor", version = "<=0.24.2" },
# Safe to bump as long as license does not change -------------^
# See D105255799.
]
[[licenses.clarify]]
name = "webpki"
version = "*"
expression = "MIT AND ISC"
license-files = [{ path = "LICENSE", hash = 0x001c7e6c }]
[[licenses.clarify]]
name = "ring"
expression = "MIT AND ISC AND OpenSSL"
license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }]
[[licenses.clarify]]
name = "webpki"
expression = "ISC"
license-files = [
{ path = "LICENSE", hash = 0x001c7e6c },
]
[[licenses.clarify]]
name = "rustls-webpki"
expression = "ISC"
license-files = [
{ path = "LICENSE", hash = 0x001c7e6c },
]
# This section is considered when running `cargo deny check bans`.
# More documentation about the 'bans' section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/bans/cfg.html
[bans]
multiple-versions = "allow"
wildcards = "deny" # Don't allow wildcard dependencies
highlight = "all"
deny = []
# This section is considered when running `cargo deny check sources`.
# More documentation about the 'sources' section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/sources/cfg.html
[sources]
unknown-registry = "deny"
unknown-git = "deny"
allow-registry = ["https://github.com/rust-lang/crates.io-index"]
allow-git = []
================================================
FILE: .changelog/.example
================================================
# Example changelog entry, Markdown with YAML front matter
# ---
# applies_to: ["client", "server", "aws-sdk-rust"] # "aws-sdk-rust" here duplicates this entry into release notes in `aws-sdk-rust`
# authors: ["rcoh"]
# references: ["smithy-rs#920"]
# breaking: false
# new_feature: false
# bug_fix: false
# ---
# Fix typos in module documentation for generated crates
================================================
FILE: .editorconfig
================================================
[*.{kt,kts}]
ij_kotlin_allow_trailing_comma = true
ij_kotlin_allow_trailing_comma_on_call_site = true
ij_java_use_single_class_imports = true
ij_groovy_use_single_class_imports = true
ij_kotlin_name_count_to_use_star_import = 100
ij_kotlin_name_count_to_use_star_import_for_members = 100
indent_size = 4
indent_style = space
insert_final_newline = true
max_line_length = 120
# Ktlint-specific config
ktlint_standard = enabled
ktlint_experimental = disabled
ktlint_standard_filename = disabled
ktlint_standard_max-line-length = disabled
ktlint_standard_argument-list-wrapping = disabled
ktlint_standard_parameter-list-wrapping = disabled
ktlint_standard_property-naming = disabled
ktlint_standard_comment-wrapping = disabled
================================================
FILE: .git-blame-ignore-revs
================================================
# .git-blame-ignore-revs
#
# To make use of this file when running `git blame`, add `--ignore-revs-file .git-blame-ignore-revs` to the arguments.
# To always make use of this file, run the following:
# git config blame.ignoreRevsFile .git-blame-ignore-revs
#
# Add `client` to `codegen-client` package namespace (#1711)
1a0f81ae33816c10c9d305f33ea03da23c6265ef
================================================
FILE: .github/ISSUE_TEMPLATE/blank_issue.md
================================================
---
name: Blank Issue
about: Create a blank issue.
---
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## Motivation and Context
<!--- Why is this change required? What problem does it solve? -->
<!--- If it fixes an open issue, please link to the issue here -->
## Description
<!--- Describe your changes in detail -->
## Testing
<!--- Please describe in detail how you tested your changes -->
<!--- Include details of your testing environment, and the tests you ran to -->
<!--- see how your change affects other areas of the code, etc. -->
## Checklist
<!--- If a checkbox below is not applicable, then please DELETE it rather than leaving it unchecked -->
- [ ] For changes to the smithy-rs codegen or runtime crates, I have created a changelog entry Markdown file in the `.changelog` directory, specifying "client," "server," or both in the `applies_to` key.
- [ ] For changes to the AWS SDK, generated SDK code, or SDK runtime crates, I have created a changelog entry Markdown file in the `.changelog` directory, specifying "aws-sdk-rust" in the `applies_to` key.
----
_By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._
================================================
FILE: .github/actions/docker-build/action.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# Use this action to execute the action scripts in tools/ci-scripts.
name: smithy-rs Docker Build
description: Run Docker build command for smithy-rs
inputs:
# The name of the script in tools/ci-scripts to run
action:
description: What action to run in the Docker build
required: true
action-arguments:
description: Arguments to pass to the action
required: false
use_cache:
description: Whether to use the gradle cache
type: boolean
required: false
default: true
runs:
using: composite
steps:
- name: Gradle Cache
if: ${{ github.event.inputs.use_cache == 'true' }}
uses: actions/cache@v4
with:
path: |
gradle/caches
gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('gradle/caches/**/*', 'gradle/wrapper/**/*') }}
restore-keys: |
${{ runner.os }}-gradle-
# Pinned to the commit hash of v2.7.3
- uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84
with:
shared-key: ${{ runner.os }}-${{ github.job }}
workspaces: |
. smithy-rs-target
- name: Download all artifacts
uses: ./smithy-rs/.github/actions/download-all-artifacts
- name: Prepare build image
shell: bash
run: |
set -x
ls -lsa
docker image ls
# Check the build artifacts to see if a prior step built a new Docker build image.
# If smithy-rs-base-image was included in the downloaded build artifacts, then load
# it and tag it as the base image to use for this action. This will prevent acquire-build-image
# from attempting to download an image from ECR since it will already exist,
# which enables testing build image modifications as part of the pull request.
if [[ -d smithy-rs-base-image ]]; then
echo "found base image in artifacts...loading it back into docker"
IMAGE_TAG="ci-$(./smithy-rs/.github/scripts/docker-image-hash)"
docker load -i smithy-rs-base-image/smithy-rs-base-image
docker tag "smithy-rs-base-image:${IMAGE_TAG}" "smithy-rs-base-image:local"
fi
docker image ls
# For this step, we want images to come from build artifacts (built as part a prior step),
# or from ECR. We disable building the image from scratch so that any mistakes in the CI
# configuration won't cause each individual action to build its own image, which would
# drastically increase the total CI time. Fail fast!
ALLOW_LOCAL_BUILD=false ./smithy-rs/.github/scripts/acquire-build-image
# This runs the commands from the matrix strategy
- name: Run ${{ inputs.action }}
shell: bash
run: |
./smithy-rs/tools/ci-build/ci-action ${{ inputs.action }} ${{ inputs.action-arguments}}
tar cfz artifacts-${{ inputs.action }}.tar.gz -C artifacts .
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: artifacts-${{ inputs.action }}
path: artifacts-${{ inputs.action }}.tar.gz
if-no-files-found: error
retention-days: 3
overwrite: true
================================================
FILE: .github/actions/download-all-artifacts/action.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
name: Download All Artifacts
description: Downloads and untars all available build artifacts
runs:
using: composite
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
- name: Untar artifacts
shell: bash
run: find . -maxdepth 2 -iname 'artifacts-*.tar.gz' -print -exec tar xfz {} \;
================================================
FILE: .github/actions/free-disk-space/action.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
name: 'Free Disk Space'
description: 'Free up disk space on GitHub Actions runners'
runs:
using: 'composite'
steps:
- name: Free up disk space
shell: bash
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
================================================
FILE: .github/scripts/README.md
================================================
# GitHub Actions Scripts
This directory contains scripts used in the smithy-rs CI/CD workflows.
## acquire-build-image
**Purpose**: Acquires and prepares Docker build images for CI/CD workflows. Acts as an intelligent wrapper that handles
image availability checking, remote pulling from AWS ECR, authentication, and local building as needed.
### Usage
```bash
# Basic usage
./acquire-build-image
# Run self-tests
./acquire-build-image --self-test
# With environment variables
ALLOW_LOCAL_BUILD=false ./acquire-build-image
GITHUB_ACTIONS=true ./acquire-build-image
```
### Environment Variables
- `ALLOW_LOCAL_BUILD` - Enable local image building (default: `true`)
- `GITHUB_ACTIONS` - Indicates running in GitHub Actions (default: `false`)
- `ENCRYPTED_DOCKER_PASSWORD` - Base64 encrypted Docker registry password
- `DOCKER_LOGIN_TOKEN_PASSPHRASE` - Passphrase for decrypting Docker password
- `OCI_EXE` - Docker-compatible executable e.g. docker, finch, podman, etc (default: `docker`)
### Behavior & Outputs
#### When image exists locally:
- Uses existing local image
- Tags: `smithy-rs-base-image:local`, `smithy-rs-build-image:latest`
- No network activity
#### When image doesn't exist locally:
1. **Attempts remote pull** from AWS ECR (`<acccount-id>.dkr.ecr.us-west-2.amazonaws.com/smithy-rs-build-image`)
- On success: Tags remote image as `smithy-rs-base-image:<tag>`
- On failure: Falls back to local build (if enabled)
2. **Local build fallback** (when remote pull fails or on ARM64):
- Builds from `tools/ci-build/Dockerfile`
- Tags: `smithy-rs-base-image:<tag>`
- In GitHub Actions: Also saves image to `./smithy-rs-base-image` file
3. **Final step** (always):
- Creates user-specific build image: `smithy-rs-build-image:latest`
- Tags base image as: `smithy-rs-base-image:local`
### Exit Codes
- `0` - Success: Build image ready for use
- `1` - Failure: Unable to acquire image
### Common Scenarios
**Local development (first run):**
```bash
./acquire-build-image
# → Pulls remote image → Tags locally → Creates build image
```
**Local development (subsequent runs):**
```bash
./acquire-build-image
# → Uses local image → Creates build image (fast)
```
**GitHub Actions:**
```bash
GITHUB_ACTIONS=true ./acquire-build-image
# → Same as above, but saves image file for job sharing if built locally
```
**ARM64 systems (Apple Silicon):**
```bash
./acquire-build-image
# → Skips remote pull → Builds locally (architecture mismatch)
```
## docker-image-hash
**Purpose**: Generates a unique hash based on the contents of the `tools/ci-build` directory. Used to create consistent Docker image tags.
### Usage
```bash
./docker-image-hash
# Outputs: a1b2c3d4e5f6... (git hash of tools/ci-build directory)
```
### Output
- Prints a git hash to stdout based on all files in `tools/ci-build`
- Hash changes only when build configuration files are modified
- Used by `acquire-build-image` to determine image tags
## upload-build-image.sh
**Purpose**: Uploads a local Docker build image to AWS ECR with proper authentication and tagging.
### Usage
```bash
# Upload with specific tag
./upload-build-image.sh <tag-name>
# Dry run (skip actual push)
DRY_RUN=true ./upload-build-image.sh <tag-name>
# Use alternative OCI executable
OCI_EXE=podman ./upload-build-image.sh <tag-name>
```
### Environment Variables
- `DRY_RUN` - Skip push to ECR (default: `false`)
- `OCI_EXE` - Docker-compatible executable (default: `docker`)
### Behavior
1. Authenticates with AWS ECR using AWS CLI
2. Tags local `smithy-rs-build-image:latest` as `<account>.dkr.ecr.us-west-2.amazonaws.com/smithy-rs-build-image:<tag>`
3. Pushes tagged image to ECR (unless `DRY_RUN=true`)
### Requirements
- AWS CLI configured with appropriate permissions
- Local image `smithy-rs-build-image:latest` must exist
================================================
FILE: .github/scripts/acquire-build-image
================================================
#!/usr/bin/env -S python3 -u
#
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
from enum import Enum
from unittest.mock import call, MagicMock
import os
import shlex
import subprocess
import sys
import time
import unittest
import base64
AWS_ACCOUNT_ID="686190543447"
AWS_REGION="us-west-2"
ECR_REPOSITORY="smithy-rs-build-image"
REMOTE_BASE_IMAGE_NAME = f"{AWS_ACCOUNT_ID}.dkr.ecr.{AWS_REGION}.amazonaws.com/{ECR_REPOSITORY}"
LOCAL_BASE_IMAGE_NAME = "smithy-rs-base-image"
LOCAL_TAG = "local"
C_YELLOW = '\033[1;33m'
C_RESET = '\033[0m'
def announce(message):
print(f"{C_YELLOW}{message}{C_RESET}")
class DockerPullResult(Enum):
SUCCESS = 1
REMOTE_ARCHITECTURE_MISMATCH = 2
ERROR_THROTTLED = 3
RETRYABLE_ERROR = 4
NOT_FOUND = 5
UNKNOWN_ERROR = 6
UNAUTHENTICATED = 7
class Platform(Enum):
X86_64 = 0
ARM_64 = 1
def oci_exe():
return os.getenv("OCI_EXE", "docker")
# Script context
class Context:
def __init__(self, start_path, script_path, tools_path, user_id, image_tag, allow_local_build, github_actions,
encrypted_docker_password, docker_passphrase):
self.start_path = start_path
self.script_path = script_path
self.tools_path = tools_path
self.docker_image_path = tools_path + "/ci-build"
self.user_id = user_id
self.image_tag = image_tag
self.allow_local_build = allow_local_build
self.github_actions = github_actions
self.encrypted_docker_password = encrypted_docker_password
self.docker_passphrase = docker_passphrase
@staticmethod
def default():
start_path = os.path.realpath(os.curdir)
script_path = os.path.dirname(os.path.realpath(__file__))
tools_path = get_cmd_output("git rev-parse --show-toplevel", cwd=script_path)[1] + "/tools"
user_id = get_cmd_output("id -u")[1]
tools_image_hash = get_cmd_output("./docker-image-hash", cwd=script_path)[1]
image_tag = f"ci-{tools_image_hash}"
allow_local_build = os.getenv("ALLOW_LOCAL_BUILD") != "false"
github_actions = os.getenv("GITHUB_ACTIONS") == "true"
encrypted_docker_password = os.getenv("ENCRYPTED_DOCKER_PASSWORD") or None
docker_passphrase = os.getenv("DOCKER_LOGIN_TOKEN_PASSPHRASE") or None
print(f"Start path: {start_path}")
print(f"Script path: {script_path}")
print(f"Tools path: {tools_path}")
print(f"User ID: {user_id}")
print(f"Required base image tag: {image_tag}")
print(f"Allow local build: {allow_local_build}")
print(f"Running in GitHub Actions: {github_actions}")
return Context(start_path=start_path, script_path=script_path, tools_path=tools_path, user_id=user_id,
image_tag=image_tag, allow_local_build=allow_local_build, github_actions=github_actions,
encrypted_docker_password=encrypted_docker_password, docker_passphrase=docker_passphrase)
def output_contains_any(stdout, stderr, messages):
for message in messages:
if message in stdout or message in stderr:
return True
return False
# Mockable shell commands
class Shell:
# Returns the platform that this script is running on
def platform(self):
(_, stdout, _) = get_cmd_output("uname -m")
if stdout == "arm64":
return Platform.ARM_64
return Platform.X86_64
# Returns True if the given `image_name` and `image_tag` exist locally
def docker_image_exists_locally(self, image_name, image_tag):
(status, _, _) = get_cmd_output(f"{oci_exe()} inspect \"{image_name}:{image_tag}\"", check=False)
return status == 0
def docker_login(self, password):
get_cmd_output(f"{oci_exe()} login --username AWS --password-stdin {AWS_ACCOUNT_ID}.dkr.ecr.{AWS_REGION}.amazonaws.com", input=password.encode('utf-8'))
# Pulls the requested `image_name` with `image_tag`. Returns `DockerPullResult`.
def docker_pull(self, image_name, image_tag):
(status, stdout, stderr) = get_cmd_output(f"{oci_exe()} pull \"{image_name}:{image_tag}\"", check=False)
print(f"{oci_exe()} pull output:")
print("------STDOUT---------")
print(stdout)
print("------STDERR---------")
print(stderr)
print("-------------------")
not_found_messages = ["not found: manifest unknown"]
throttle_messages = ["toomanyrequests:"]
retryable_messages = ["net/http: TLS handshake timeout"]
unauthenticated_messages = ["no basic auth credentials"]
if status == 0:
return DockerPullResult.SUCCESS
print(f"{oci_exe()} pull status: {status}")
if output_contains_any(stdout, stderr, throttle_messages):
return DockerPullResult.ERROR_THROTTLED
elif output_contains_any(stdout, stderr, not_found_messages):
return DockerPullResult.NOT_FOUND
elif output_contains_any(stdout, stderr, retryable_messages):
return DockerPullResult.RETRYABLE_ERROR
elif output_contains_any(stdout, stderr, unauthenticated_messages):
return DockerPullResult.UNAUTHENTICATED
return DockerPullResult.UNKNOWN_ERROR
# Builds the base image with the Dockerfile in `path` and tags with with `image_tag`
def docker_build_base_image(self, image_tag, path):
run(f"{oci_exe()} build -t \"smithy-rs-base-image:{image_tag}\" .", cwd=path)
# Builds the local build image
def docker_build_build_image(self, user_id, docker_image_path):
run(
f"{oci_exe()} build -t smithy-rs-build-image --file add-local-user.dockerfile --build-arg=USER_ID={user_id} .",
cwd=docker_image_path
)
# Saves the Docker image named `image_name` with `image_tag` to `output_path`
def docker_save(self, image_name, image_tag, output_path):
run(f"{oci_exe()} save -o \"{output_path}\" \"{image_name}:{image_tag}\"")
# Tags an image with a new image name and tag
def docker_tag(self, image_name, image_tag, new_image_name, new_image_tag):
run(f"{oci_exe()} tag \"{image_name}:{image_tag}\" \"{new_image_name}:{new_image_tag}\"")
# Pulls a Docker image and retries if it gets throttled
def docker_pull_with_retry(shell, image_name, image_tag, throttle_sleep_time=120, retryable_error_sleep_time=1):
if shell.platform() == Platform.ARM_64:
return DockerPullResult.REMOTE_ARCHITECTURE_MISMATCH
for attempt in range(1, 6):
announce(f"Attempting to pull remote image {image_name}:{image_tag} (attempt {attempt})...")
result = shell.docker_pull(image_name, image_tag)
if result == DockerPullResult.ERROR_THROTTLED:
announce("Pull failed due to throttling. Waiting and trying again...")
time.sleep(throttle_sleep_time)
elif result == DockerPullResult.RETRYABLE_ERROR:
announce("A retryable error occurred. Trying again...")
time.sleep(retryable_error_sleep_time)
else:
return result
# Hit max retries; the image probably exists, but we are getting throttled hard. Fail.
announce("Image pulling throttled for too many attempts. The remote image might exist, but we can't get it.")
return DockerPullResult.ERROR_THROTTLED
# Runs a shell command
def run(command, cwd=None):
subprocess.run(shlex.split(command), stdout=sys.stderr, stderr=sys.stderr, cwd=cwd, check=True)
# Returns (status, output) from a shell command
def get_cmd_output(command, cwd=None, check=True, **kwargs):
if isinstance(command, str):
command = shlex.split(command)
result = subprocess.run(
command,
capture_output=True,
check=False,
cwd=cwd,
**kwargs
)
stdout = result.stdout.decode("utf-8").strip()
stderr = result.stderr.decode("utf-8").strip()
if check and result.returncode != 0:
raise Exception(f"failed to run '{command}.\n{stdout}\n{stderr}")
return result.returncode, stdout, stderr
def decrypt_and_login(shell, secret, passphrase):
decoded = base64.b64decode(secret, validate=True)
if not passphrase:
raise Exception("a secret was set but no passphrase was set (or it was empty)")
(code, password, err) = get_cmd_output(
["gpg", "--decrypt", "--batch", "--quiet", "--passphrase", passphrase, "--output", "-"],
input=decoded)
shell.docker_login(password)
print(f"{oci_exe()} login success!")
def acquire_build_image(context=Context.default(), shell=Shell()):
if context.encrypted_docker_password is not None:
decrypt_and_login(shell, context.encrypted_docker_password, context.docker_passphrase)
# If the image doesn't already exist locally, then look remotely
if not shell.docker_image_exists_locally(LOCAL_BASE_IMAGE_NAME, context.image_tag):
announce("Base image not found locally.")
pull_result = docker_pull_with_retry(shell, REMOTE_BASE_IMAGE_NAME, context.image_tag)
if pull_result != DockerPullResult.SUCCESS:
if pull_result == DockerPullResult.REMOTE_ARCHITECTURE_MISMATCH:
announce("Remote architecture is not the same as the local architecture. A local build is required.")
elif pull_result == DockerPullResult.UNKNOWN_ERROR:
announce("An unknown failure happened during Docker pull. This needs to be examined.")
return 1
elif pull_result == DockerPullResult.UNAUTHENTICATED:
announce("Unable to authenticate and pull image from remote repository. A local build is required.")
else:
announce("Failed to pull remote image, which can happen if it doesn't exist.")
if not context.allow_local_build:
announce("Local build turned off by ALLOW_LOCAL_BUILD env var. Aborting.")
return 1
announce("Building a new image locally.")
shell.docker_build_base_image(context.image_tag, context.docker_image_path)
if context.github_actions:
announce("Saving base image for use in later jobs...")
shell.docker_save(
LOCAL_BASE_IMAGE_NAME,
context.image_tag,
context.start_path + "/smithy-rs-base-image"
)
else:
announce("Successfully pulled remote image!")
shell.docker_tag(REMOTE_BASE_IMAGE_NAME, context.image_tag, LOCAL_BASE_IMAGE_NAME, context.image_tag)
else:
announce("Base image found locally! No retrieval or rebuild necessary.")
announce("Creating local build image...")
shell.docker_tag(LOCAL_BASE_IMAGE_NAME, context.image_tag, LOCAL_BASE_IMAGE_NAME, LOCAL_TAG)
shell.docker_build_build_image(context.user_id, context.docker_image_path)
return 0
class SelfTest(unittest.TestCase):
def test_context(self, github_actions=False, allow_local_build=False, encrypted_docker_password=None,
docker_passphrase=None):
return Context(
start_path="/tmp/test/start-path",
script_path="/tmp/test/script-path",
tools_path="/tmp/test/tools-path",
user_id="123",
image_tag="someimagetag",
encrypted_docker_password=encrypted_docker_password,
docker_passphrase=docker_passphrase,
github_actions=github_actions,
allow_local_build=allow_local_build,
)
def mock_shell(self):
shell = Shell()
shell.platform = MagicMock()
shell.docker_build_base_image = MagicMock()
shell.docker_build_build_image = MagicMock()
shell.docker_image_exists_locally = MagicMock()
shell.docker_pull = MagicMock()
shell.docker_save = MagicMock()
shell.docker_tag = MagicMock()
shell.docker_login = MagicMock()
return shell
def test_retry_architecture_mismatch(self):
shell = self.mock_shell()
shell.platform.side_effect = [Platform.ARM_64]
self.assertEqual(
DockerPullResult.REMOTE_ARCHITECTURE_MISMATCH,
docker_pull_with_retry(
shell,
"test-image",
"test-image-tag",
throttle_sleep_time=0,
retryable_error_sleep_time=0
)
)
def test_docker_login(self):
shell = self.mock_shell()
acquire_build_image(self.test_context(
encrypted_docker_password="jA0ECQMCvYU/JxsX3g/70j0BxbLLW8QaFWWb/DqY9gPhTuEN/xdYVxaoDnV6Fha+lAWdT7xN0qZr5DHPBalLfVvvM1SEXRBI8qnfXyGI",
docker_passphrase="secret"), shell)
shell.docker_login.assert_called_with("payload")
def test_retry_immediate_success(self):
shell = self.mock_shell()
shell.docker_pull.side_effect = [DockerPullResult.SUCCESS]
self.assertEqual(
DockerPullResult.SUCCESS,
docker_pull_with_retry(
shell,
"test-image",
"test-image-tag",
throttle_sleep_time=0,
retryable_error_sleep_time=0
)
)
def test_retry_immediate_not_found(self):
shell = self.mock_shell()
shell.docker_pull.side_effect = [DockerPullResult.NOT_FOUND]
self.assertEqual(
DockerPullResult.NOT_FOUND,
docker_pull_with_retry(
shell,
"test-image",
"test-image-tag",
throttle_sleep_time=0,
retryable_error_sleep_time=0
)
)
def test_retry_immediate_unknown_error(self):
shell = self.mock_shell()
shell.docker_pull.side_effect = [DockerPullResult.UNKNOWN_ERROR]
self.assertEqual(
DockerPullResult.UNKNOWN_ERROR,
docker_pull_with_retry(
shell,
"test-image",
"test-image-tag",
throttle_sleep_time=0,
retryable_error_sleep_time=0
)
)
def test_retry_throttling_then_success(self):
shell = self.mock_shell()
shell.docker_pull.side_effect = [
DockerPullResult.ERROR_THROTTLED,
DockerPullResult.ERROR_THROTTLED,
DockerPullResult.SUCCESS
]
self.assertEqual(
DockerPullResult.SUCCESS,
docker_pull_with_retry(
shell,
"test-image",
"test-image-tag",
throttle_sleep_time=0,
retryable_error_sleep_time=0
)
)
def test_retry_throttling_and_retryable_error_then_success(self):
shell = self.mock_shell()
shell.docker_pull.side_effect = [
DockerPullResult.ERROR_THROTTLED,
DockerPullResult.RETRYABLE_ERROR,
DockerPullResult.ERROR_THROTTLED,
DockerPullResult.SUCCESS
]
self.assertEqual(
DockerPullResult.SUCCESS,
docker_pull_with_retry(
shell,
"test-image",
"test-image-tag",
throttle_sleep_time=0,
retryable_error_sleep_time=0
)
)
def test_retry_throttling_then_not_found(self):
shell = self.mock_shell()
shell.docker_pull.side_effect = [
DockerPullResult.ERROR_THROTTLED,
DockerPullResult.NOT_FOUND
]
self.assertEqual(
DockerPullResult.NOT_FOUND,
docker_pull_with_retry(
shell,
"test-image",
"test-image-tag",
throttle_sleep_time=0,
retryable_error_sleep_time=0
)
)
def test_retry_max_attempts(self):
shell = self.mock_shell()
shell.docker_pull.side_effect = [
DockerPullResult.ERROR_THROTTLED,
DockerPullResult.ERROR_THROTTLED,
DockerPullResult.ERROR_THROTTLED,
DockerPullResult.ERROR_THROTTLED,
DockerPullResult.ERROR_THROTTLED,
]
self.assertEqual(
DockerPullResult.ERROR_THROTTLED,
docker_pull_with_retry(
shell,
"test-image",
"test-image-tag",
throttle_sleep_time=0,
retryable_error_sleep_time=0
)
)
# When: the base image already exists locally with the right image tag
# It should: build a local build image using that local base image
def test_image_exists_locally_already(self):
shell = self.mock_shell()
shell.platform.side_effect = [Platform.X86_64]
shell.docker_image_exists_locally.side_effect = [True]
self.assertEqual(0, acquire_build_image(self.test_context(), shell))
shell.docker_image_exists_locally.assert_called_once()
shell.docker_tag.assert_called_with(LOCAL_BASE_IMAGE_NAME, "someimagetag", LOCAL_BASE_IMAGE_NAME, LOCAL_TAG)
shell.docker_build_build_image.assert_called_with("123", "/tmp/test/tools-path/ci-build")
# When:
# - the base image doesn't exist locally
# - the base image doesn't exist remotely
# - local builds are allowed
# - NOT running in GitHub Actions
# It should: build a local image from scratch and NOT save it to file
def test_image_local_build(self):
context = self.test_context(allow_local_build=True)
shell = self.mock_shell()
shell.platform.side_effect = [Platform.X86_64]
shell.docker_image_exists_locally.side_effect = [False]
shell.docker_pull.side_effect = [DockerPullResult.NOT_FOUND]
self.assertEqual(0, acquire_build_image(context, shell))
shell.docker_image_exists_locally.assert_called_once()
shell.docker_build_base_image.assert_called_with("someimagetag", "/tmp/test/tools-path/ci-build")
shell.docker_save.assert_not_called()
shell.docker_tag.assert_called_with(LOCAL_BASE_IMAGE_NAME, "someimagetag", LOCAL_BASE_IMAGE_NAME, LOCAL_TAG)
shell.docker_build_build_image.assert_called_with("123", "/tmp/test/tools-path/ci-build")
# When:
# - the base image doesn't exist locally
# - the base image exists remotely
# - local builds are allowed
# - there is a difference in platform between local and remote
# - NOT running in GitHub Actions
# It should: build a local image from scratch and NOT save it to file
def test_image_local_build_architecture_mismatch(self):
context = self.test_context(allow_local_build=True)
shell = self.mock_shell()
shell.platform.side_effect = [Platform.ARM_64]
shell.docker_image_exists_locally.side_effect = [False]
self.assertEqual(0, acquire_build_image(context, shell))
shell.docker_image_exists_locally.assert_called_once()
shell.docker_build_base_image.assert_called_with("someimagetag", "/tmp/test/tools-path/ci-build")
shell.docker_save.assert_not_called()
shell.docker_tag.assert_called_with(LOCAL_BASE_IMAGE_NAME, "someimagetag", LOCAL_BASE_IMAGE_NAME, LOCAL_TAG)
shell.docker_build_build_image.assert_called_with("123", "/tmp/test/tools-path/ci-build")
# When:
# - the base image doesn't exist locally
# - the base image doesn't exist remotely
# - local builds are allowed
# - running in GitHub Actions
# It should: build a local image from scratch and save it to file
def test_image_local_build_github_actions(self):
context = self.test_context(allow_local_build=True, github_actions=True)
shell = self.mock_shell()
shell.platform.side_effect = [Platform.X86_64]
shell.docker_image_exists_locally.side_effect = [False]
shell.docker_pull.side_effect = [DockerPullResult.NOT_FOUND]
self.assertEqual(0, acquire_build_image(context, shell))
shell.docker_image_exists_locally.assert_called_once()
shell.docker_build_base_image.assert_called_with("someimagetag", "/tmp/test/tools-path/ci-build")
shell.docker_save.assert_called_with(
LOCAL_BASE_IMAGE_NAME,
"someimagetag",
"/tmp/test/start-path/smithy-rs-base-image"
)
shell.docker_tag.assert_called_with(LOCAL_BASE_IMAGE_NAME, "someimagetag", LOCAL_BASE_IMAGE_NAME, LOCAL_TAG)
shell.docker_build_build_image.assert_called_with("123", "/tmp/test/tools-path/ci-build")
# When:
# - the base image doesn't exist locally
# - the base image doesn't exist remotely
# - local builds are NOT allowed
# It should: fail since local builds are not allowed
def test_image_fail_local_build_disabled(self):
context = self.test_context(allow_local_build=False)
shell = self.mock_shell()
shell.platform.side_effect = [Platform.X86_64]
shell.docker_image_exists_locally.side_effect = [False]
shell.docker_pull.side_effect = [DockerPullResult.NOT_FOUND]
self.assertEqual(1, acquire_build_image(context, shell))
shell.docker_image_exists_locally.assert_called_once()
shell.docker_build_base_image.assert_not_called()
shell.docker_save.assert_not_called()
shell.docker_tag.assert_not_called()
shell.docker_build_build_image.assert_not_called()
# When:
# - the base image doesn't exist locally
# - the base image exists remotely
# It should: pull the remote image and tag it
def test_pull_remote_image(self):
context = self.test_context(allow_local_build=False)
shell = self.mock_shell()
shell.platform.side_effect = [Platform.X86_64]
shell.docker_image_exists_locally.side_effect = [False]
shell.docker_pull.side_effect = [DockerPullResult.SUCCESS]
self.assertEqual(0, acquire_build_image(context, shell))
shell.docker_image_exists_locally.assert_called_once()
shell.docker_build_base_image.assert_not_called()
shell.docker_save.assert_not_called()
shell.docker_tag.assert_has_calls([
call(REMOTE_BASE_IMAGE_NAME, "someimagetag", LOCAL_BASE_IMAGE_NAME, "someimagetag"),
call(LOCAL_BASE_IMAGE_NAME, "someimagetag", LOCAL_BASE_IMAGE_NAME, LOCAL_TAG)
])
shell.docker_build_build_image.assert_called_with("123", "/tmp/test/tools-path/ci-build")
def main():
# Run unit tests if given `--self-test` argument
if len(sys.argv) > 1 and sys.argv[1] == "--self-test":
sys.argv.pop()
unittest.main()
else:
sys.exit(acquire_build_image())
if __name__ == "__main__":
main()
================================================
FILE: .github/scripts/docker-image-hash
================================================
#!/bin/bash
#
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# Outputs the git hash of the `tools/` directory.
# The tools git hash is used to tag the Docker build images that get uploaded to ECR.
set -eo pipefail
cd "$(dirname "$0")"
cd "$(git rev-parse --show-toplevel)"
git ls-files -s --full-name "tools/ci-build" | git hash-object --stdin
================================================
FILE: .github/scripts/get-or-create-release-branch.sh
================================================
#!/bin/bash
#
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
#
set -eux
# The script populates an output file with key-value pairs that are needed in the release CI workflow to carry out
# the next steps in the release flow: the name of the release branch and a boolean flag that is set to 'true' if this
# is the beginning of a new release series.
if [ -z "$1" ]; then
echo "You need to specify the path of the file where you want to collect the output"
exit 1
else
output_file="$1"
fi
branch_name="smithy-rs-release-1.x.y"
if [[ "${DRY_RUN}" == "true" ]]; then
branch_name="${branch_name}-preview"
fi
echo "release_branch=${branch_name}" >"${output_file}"
commit_sha=$(git rev-parse --short HEAD)
# the git repo is in a weird state because **main has never been checked out**!
# This prevents the `git branch --contains` from working because there is no _local_ ref for main
git checkout main
git checkout "${commit_sha}"
if ! git ls-remote --exit-code --heads origin "${branch_name}"; then
# The release branch does not exist.
# We need to make sure that the commit SHA that we are releasing is on `main`.
git fetch origin main
echo "Branches: "
git branch --contains "${commit_sha}"
git show origin/main | head -n 1
if git branch --contains "${commit_sha}" | grep main; then
# We can then create the release branch and set the current commit as its tip
if [[ "${DRY_RUN}" == "true" ]]; then
git push --force origin "HEAD:refs/heads/${branch_name}"
else
git checkout -b "${branch_name}"
git push origin "${branch_name}"
fi
else
echo "You must choose a commit from main to create a new release branch!"
exit 1
fi
else
echo "Patch release ${branch_name} already exists"
fi
================================================
FILE: .github/scripts/upload-build-image.sh
================================================
#!/bin/bash
#
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
set -eux
if [ $# -ne 1 ]; then
echo "Error: Tag name is required"
echo "Usage: $0 <tag-name>"
exit 1
fi
# Set OCI executor - default to docker if not set
: "${OCI_EXE:=docker}"
DRY_RUN=${DRY_RUN:-false}
TAG_NAME=$1
AWS_REGION="us-west-2"
AWS_ACCOUNT_ID="686190543447"
ECR_REPOSITORY="smithy-rs-build-image"
ECR_IMAGE="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPOSITORY}:${TAG_NAME}"
echo "Logging in to Amazon ECR..."
aws ecr get-login-password --region ${AWS_REGION} | ${OCI_EXE} login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com
if [ $? -ne 0 ]; then
echo "Error: Failed to login to ECR"
exit 1
fi
echo "Tagging image as: ${ECR_IMAGE}"
${OCI_EXE} tag ${ECR_REPOSITORY}:latest ${ECR_IMAGE}
if [ $? -ne 0 ]; then
echo "Error: Failed to tag the image"
exit 1
fi
if [[ "${DRY_RUN}" == "true" ]]; then
echo "Dry run enabled - skipping push to ECR"
exit 0
else
echo "Pushing image to ECR..."
${OCI_EXE} push ${ECR_IMAGE}
if [ $? -ne 0 ]; then
echo "Error: Failed to push the image"
exit 1
fi
echo "Successfully uploaded image to ECR: ${ECR_IMAGE}"
fi
================================================
FILE: .github/workflows/backport-pull-request.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
name: Open a backport PR to merge the release branch into main
on:
# automatically called by release.yml
workflow_dispatch:
# can also be manually triggered when a patch fix is merged into the release branch and needs to be back-ported
workflow_call:
secrets:
RELEASE_AUTOMATION_BOT_PAT:
required: true
env:
release_branch: smithy-rs-release-1.x.y
jobs:
create-backport-pull-request:
runs-on: ubuntu-latest
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Checkout
uses: actions/checkout@v4
with:
token: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }}
- name: Prepare backport branch
id: backport-branch
run: |
# This step assumes the merge runs cleanly without conflicts, which should be the case when
# this workflow is called by the release workflow right after a release tag has been created.
git config --local user.name "AWS SDK Rust Bot"
git config --local user.email "aws-sdk-rust-primary@amazon.com"
git fetch --unshallow
git checkout origin/main
backport_branch="merge-${{ env.release_branch }}-to-main-$(date +%s)"
git checkout -b "${backport_branch}"
git merge "origin/${{ env.release_branch }}" -m 'Merge remote-tracking branch "origin/${{ env.release_branch }}" into "merge-${{ env.release_branch }}-to-main"'
git push origin HEAD
echo "branch_name=${backport_branch}" > $GITHUB_OUTPUT
- name: Create pull request
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }}
run: |
gh pr create \
--title "Merge ${{ env.release_branch }} into main" \
--body "Merge it with \`gh pr merge --admin --merge\` or manually merge it with the merge commit (not squash merge)." \
--base main \
--head ${{ steps.backport-branch.outputs.branch_name }} \
--label "needs-sdk-review" \
--draft
================================================
FILE: .github/workflows/ci-main.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# This workflow differs from PR CI in that it uploads a Docker build image to public ECR.
# This should be done only on push to main so that PRs from forks can successfully run CI
# since GitHub secrets cannot be shared with a PR from a fork.
name: CI on Branch `main`
on:
workflow_dispatch:
push:
branches: [main]
# Allow only one Docker build image build to run at a time for the entire smithy-rs repo
concurrency:
group: ci-main-yml
cancel-in-progress: true
permissions:
actions: read
contents: read
id-token: write
pull-requests: read
jobs:
# Build and upload the Docker build image if necessary
acquire-base-image:
runs-on: smithy_ubuntu-latest_8-core
name: Acquire Base Image
timeout-minutes: 60
outputs:
docker-login-password: ${{ steps.set-token.outputs.docker-login-password }}
permissions:
id-token: write
contents: read
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Checkout
uses: actions/checkout@v4
- uses: ./.github/actions/free-disk-space
- name: Acquire credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.SMITHY_RS_ECR_PUSH_ROLE_ARN }}
role-session-name: GitHubActions
aws-region: us-west-2
- name: Save the docker login password to the output
id: set-token
run: |
ENCRYPTED_PAYLOAD=$(
gpg --symmetric --batch --passphrase "${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }}" --output - <(aws ecr get-login-password --region us-west-2) | base64 -w0
)
echo "docker-login-password=$ENCRYPTED_PAYLOAD" >> $GITHUB_OUTPUT
- name: Acquire base image
id: acquire
env:
DOCKER_BUILDKIT: 1
ENCRYPTED_DOCKER_PASSWORD: ${{ steps.set-token.outputs.docker-login-password }}
DOCKER_LOGIN_TOKEN_PASSPHRASE: ${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }}
run: ./.github/scripts/acquire-build-image
- name: Tag and upload image
run: |
pwd
IMAGE_TAG="ci-$(./.github/scripts/docker-image-hash)"
./.github/scripts/upload-build-image.sh $IMAGE_TAG
# Run the shared CI after a Docker build image has been uploaded to ECR
ci:
needs: acquire-base-image
uses: ./.github/workflows/ci.yml
secrets:
ENCRYPTED_DOCKER_PASSWORD: ${{ needs.acquire-base-image.outputs.docker-login-password }}
DOCKER_LOGIN_TOKEN_PASSPHRASE: ${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }}
CANARY_GITHUB_ACTIONS_ROLE_ARN: ${{ secrets.CANARY_GITHUB_ACTIONS_ROLE_ARN }}
CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME: ${{ secrets.CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME }}
================================================
FILE: .github/workflows/ci-pr-forks.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# This workflow runs CI for pull requests from forks, which can't make use of secrets.
name: CI (from fork)
on:
pull_request:
# Allow one instance of this workflow per pull request, and cancel older runs when new changes are pushed
concurrency:
group: ci-forks-yaml-${{ github.ref }}
cancel-in-progress: true
permissions:
actions: read
contents: read
id-token: write
pull-requests: read
jobs:
# Forks do not have access to private ECR repository. Image is built locally
# and uploaded as a build artifact for other jobs to download and use.
acquire-base-image:
name: Acquire Base Image
if: ${{ github.event.pull_request.head.repo.full_name != 'smithy-lang/smithy-rs' }}
permissions:
id-token: write
contents: read
runs-on: smithy_ubuntu-latest_8-core
timeout-minutes: 90
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
- uses: ./smithy-rs/.github/actions/free-disk-space
- name: Acquire base image
id: acquire
env:
DOCKER_BUILDKIT: 1
run: ./smithy-rs/.github/scripts/acquire-build-image
- name: Upload base image
uses: actions/upload-artifact@v4
with:
name: smithy-rs-base-image
path: smithy-rs-base-image
retention-days: 1
# Run shared CI after the Docker build image has been built locally
ci:
needs: acquire-base-image
if: ${{ github.event.pull_request.head.repo.full_name != 'smithy-lang/smithy-rs' }}
uses: ./.github/workflows/ci.yml
with:
run_canary: false
semver-checks:
name: Check PR semver compliance
permissions:
pull-requests: read
runs-on: smithy_ubuntu-latest_8-core
timeout-minutes: 30
needs:
- acquire-base-image
if: |
always() &&
!contains(needs.*.result, 'failure') &&
!contains(needs.*.result, 'cancelled') &&
github.event.pull_request.head.repo.full_name != 'smithy-lang/smithy-rs'
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
ref: ${{ inputs.git_ref }}
- name: Get PR info
id: check-breaking-label
uses: actions/github-script@v7
with:
script: |
const response = await github.rest.pulls.get({
pull_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
});
const labels = response.data.labels.map(l => l.name);
const isBreaking = labels.includes("breaking-change");
const data = {
labels,
isBreaking
};
console.log("data:", data);
return data;
- name: Run semver check
uses: ./smithy-rs/.github/actions/docker-build
with:
action: check-semver
action-arguments: ${{ github.event.pull_request.base.sha }} ${{ fromJSON(steps.check-breaking-label.outputs.result).isBreaking }}
- name: Print help message
if: failure()
run: echo "::error::This pull request either contains breaking changes, or has cross-crate changes that may be backwards compatible, but that cargo-semver-checks cannot verify. Please scrutinize the change for backwards compatibility."
================================================
FILE: .github/workflows/ci-pr.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# This workflow runs CI and the PR Bot on pull requests that are not from forked repositories.
name: CI
on:
pull_request:
# Allow one instance of this workflow per pull request, and cancel older runs when new changes are pushed
concurrency:
group: ci-yaml-${{ github.ref }}
cancel-in-progress: true
permissions:
actions: read
contents: read
id-token: write
pull-requests: write
jobs:
# This job will, if possible, save a docker login password to the job outputs. The token will
# be encrypted with the passphrase stored as a GitHub secret. The login password expires after 12h.
# The login password is encrypted with the repo secret DOCKER_LOGIN_TOKEN_PASSPHRASE
save-docker-login-token:
name: Save a docker login token
timeout-minutes: 10
if: ${{ github.event.pull_request.head.repo.full_name == 'smithy-lang/smithy-rs' }}
outputs:
docker-login-password: ${{ steps.set-token.outputs.docker-login-password }}
permissions:
id-token: write
contents: read
continue-on-error: true
runs-on: ubuntu-latest
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Attempt to load a docker login password
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.SMITHY_RS_ECR_PUSH_ROLE_ARN }}
role-session-name: GitHubActions
aws-region: us-west-2
- name: Save the docker login password to the output
id: set-token
run: |
ENCRYPTED_PAYLOAD=$(
gpg --symmetric --batch --passphrase "${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }}" --output - <(aws ecr get-login-password --region us-west-2) | base64 -w0
)
echo "docker-login-password=$ENCRYPTED_PAYLOAD" >> $GITHUB_OUTPUT
# This job detects if the PR made changes to build tools. If it did, then it builds a new
# build Docker image. Otherwise, it downloads a build image from ECR. In both cases,
# it uploads the image as a build artifact for other jobs to download and use.
acquire-base-image:
name: Acquire Base Image
timeout-minutes: 90
needs: save-docker-login-token
if: ${{ github.event.pull_request.head.repo.full_name == 'smithy-lang/smithy-rs' }}
runs-on: smithy_ubuntu-latest_8-core
env:
ENCRYPTED_DOCKER_PASSWORD: ${{ needs.save-docker-login-token.outputs.docker-login-password }}
DOCKER_LOGIN_TOKEN_PASSPHRASE: ${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }}
permissions:
id-token: write
contents: read
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
- uses: ./smithy-rs/.github/actions/free-disk-space
- name: Acquire base image
id: acquire
env:
DOCKER_BUILDKIT: 1
run: ./smithy-rs/.github/scripts/acquire-build-image
- name: Acquire credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.SMITHY_RS_ECR_PUSH_ROLE_ARN }}
role-session-name: GitHubActions
aws-region: us-west-2
- name: Upload image
run: |
IMAGE_TAG="ci-$(./smithy-rs/.github/scripts/docker-image-hash)"
./smithy-rs/.github/scripts/upload-build-image.sh $IMAGE_TAG
# Run shared CI after the Docker build image has either been rebuilt or found in ECR
ci:
needs:
- save-docker-login-token
- acquire-base-image
if: ${{ github.event.pull_request.head.repo.full_name == 'smithy-lang/smithy-rs' }}
uses: ./.github/workflows/ci.yml
secrets:
ENCRYPTED_DOCKER_PASSWORD: ${{ needs.save-docker-login-token.outputs.docker-login-password }}
DOCKER_LOGIN_TOKEN_PASSPHRASE: ${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }}
CANARY_GITHUB_ACTIONS_ROLE_ARN: ${{ secrets.CANARY_GITHUB_ACTIONS_ROLE_ARN }}
CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME: ${{ secrets.CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME }}
# The PR bot requires a Docker build image, so make it depend on the `acquire-base-image` job.
pr_bot:
name: PR Bot
if: ${{ github.event.pull_request.head.repo.full_name == 'smithy-lang/smithy-rs' }}
needs:
- save-docker-login-token
- acquire-base-image
uses: ./.github/workflows/pull-request-bot.yml
with:
issue_number: ${{ github.event.number }}
base_revision: ${{ github.event.pull_request.base.sha }}
head_revision: ${{ github.event.pull_request.head.sha }}
secrets:
SMITHY_RS_PULL_REQUEST_CDN_S3_BUCKET_NAME: ${{ secrets.SMITHY_RS_PULL_REQUEST_CDN_S3_BUCKET_NAME }}
SMITHY_RS_PULL_REQUEST_CDN_ROLE_ARN: ${{ secrets.SMITHY_RS_PULL_REQUEST_CDN_ROLE_ARN }}
ENCRYPTED_DOCKER_PASSWORD: ${{ needs.save-docker-login-token.outputs.docker-login-password }}
DOCKER_LOGIN_TOKEN_PASSPHRASE: ${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }}
semver-checks:
name: Check PR semver compliance
permissions:
pull-requests: read
runs-on: smithy_ubuntu-latest_8-core
timeout-minutes: 30
needs:
- save-docker-login-token
- acquire-base-image
# We need `always` here otherwise this job won't run if the previous job has been skipped
# See https://samanpavel.medium.com/github-actions-conditional-job-execution-e6aa363d2867
if: |
always() &&
!contains(needs.*.result, 'failure') &&
!contains(needs.*.result, 'cancelled') &&
github.event.pull_request.head.repo.full_name == 'smithy-lang/smithy-rs'
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
ref: ${{ inputs.git_ref }}
- name: Get PR info
id: check-breaking-label
uses: actions/github-script@v7
with:
script: |
const response = await github.rest.pulls.get({
pull_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
});
const labels = response.data.labels.map(l => l.name);
const isBreaking = labels.includes("breaking-change");
const data = {
labels,
isBreaking
};
console.log("data:", data);
return data;
- name: Run semver check
env:
ENCRYPTED_DOCKER_PASSWORD: ${{ needs.save-docker-login-token.outputs.docker-login-password }}
DOCKER_LOGIN_TOKEN_PASSPHRASE: ${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }}
uses: ./smithy-rs/.github/actions/docker-build
with:
action: check-semver
action-arguments: ${{ github.event.pull_request.base.sha }} ${{ fromJSON(steps.check-breaking-label.outputs.result).isBreaking }}
- name: Print help message
if: failure()
run: echo "::error::This pull request either contains breaking changes, or has cross-crate changes that may be backwards compatible, but that cargo-semver-checks cannot verify. Please scrutinize the change for backwards compatibility."
================================================
FILE: .github/workflows/ci-tls.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# This workflow tests the TLS configuration of the smithy-rs client
# To run on an Ubuntu machine, run each step in this order.
# Each script can be run on your Ubuntu host.
# You will have to install Docker and rustc/cargo manually.
env:
rust_version: 1.68.2
name: Verify client TLS configuration
on:
workflow_dispatch:
pull_request:
push:
branches: [main]
jobs:
verify-tls-config:
name: Verify TLS configuration
# TODO: GH runners recently bumped the default Ubuntu version to 24.x, this comes with an upgraded OpenSSL
# version that causes the python oscrypto package to throw an error: https://github.com/wbond/oscrypto/issues/78
# Until that package is updated we are pinning the version here.
runs-on: ubuntu-22.04
timeout-minutes: 20
steps:
- name: Install packages
shell: bash
run: |
sudo apt-get update
sudo apt-get -y install gcc make python3-pip nginx git ruby pkg-config libssl-dev faketime
pip3 install certbuilder crlbuilder
- name: Configure JDK
uses: actions/setup-java@v4
with:
distribution: corretto
java-version: 17
- name: Stop nginx
run: sudo systemctl stop nginx
- name: Checkout smithy-rs
uses: actions/checkout@v4
with:
path: ./smithy-rs
- name: Checkout trytls
uses: actions/checkout@v4
with:
repository: ouspg/trytls
path: ./trytls
- name: Checkout badtls
uses: actions/checkout@v4
with:
repository: wbond/badtls.io
path: ./badtls.io
- name: Checkout badssl
uses: actions/checkout@v4
with:
repository: chromium/badssl.com
path: ./badssl.com
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.rust_version }}
- name: Build badssl.com
shell: bash
working-directory: badssl.com
env:
DOCKER_BUILDKIT: 1
run: ../smithy-rs/tools/ci-scripts/configure-tls/configure-badssl
- name: Build SDK
working-directory: smithy-rs
run: ./gradlew :aws:sdk:assemble -Paws.services=+sts,+sso,+ssooidc,+signin
- name: Build trytls
shell: bash
working-directory: trytls
run: ../smithy-rs/tools/ci-scripts/configure-tls/configure-trytls
- name: Build badtls.io
working-directory: badtls.io
shell: bash
run: ../smithy-rs/tools/ci-scripts/configure-tls/configure-badtls
- name: Update TLS configuration
shell: bash
run: smithy-rs/tools/ci-scripts/configure-tls/update-certs
- name: Build TLS stub
working-directory: smithy-rs/tools/ci-resources/tls-stub
shell: bash
run: cargo build
- name: Test TLS configuration
working-directory: smithy-rs/tools
shell: bash
run: trytls https target/debug/stub
================================================
FILE: .github/workflows/ci.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# This is the shared CI workflow that is run by both `ci-pr.yml` and `ci-main.yml` depending
# on if a pull request is being checked, or if the `main` branch is being checked after merge.
name: Test
on:
workflow_call:
inputs:
run_canary:
description: Whether to run the canary or not.
required: false
default: true
type: boolean
git_ref:
description: |
The git reference that all checks should be run against. It can be a branch, a tag or a commit SHA.
If unspecified, it will default to the git reference or SHA that triggered the execution of this workflow.
required: false
type: string
default: ''
secrets:
# the docker login password for ECR (encrypted with the DOCKER_LOGIN_TOKEN_PASSPHRASE)
ENCRYPTED_DOCKER_PASSWORD:
required: false
DOCKER_LOGIN_TOKEN_PASSPHRASE:
required: false
CANARY_GITHUB_ACTIONS_ROLE_ARN:
required: false
CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME:
required: false
env:
rust_version: 1.91.1
rust_toolchain_components: clippy,rustfmt
ENCRYPTED_DOCKER_PASSWORD: ${{ secrets.ENCRYPTED_DOCKER_PASSWORD }}
DOCKER_LOGIN_TOKEN_PASSPHRASE: ${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }}
jobs:
# The `generate` job runs scripts that produce artifacts that are required by the `test` job,
# and also runs some checks/lints so that those are run sooner rather than later.
generate:
name: Generate
timeout-minutes: 30
runs-on: smithy_ubuntu-latest_8-core
# To avoid repeating setup boilerplate, we have the actual commands
# in a matrix strategy. These commands get run in the steps after all the setup.
strategy:
fail-fast: false
matrix:
# These correspond to scripts in tools/ci-scripts that will be run in the Docker build image
actions:
- action: generate-aws-sdk
- action: generate-aws-sdk-smoketest
- action: generate-smithy-rs-release
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
ref: ${{ inputs.git_ref }}
# `generate-smithy-rs-release` requires access to previous tags to determine if a numerical suffix is needed
# to make the release tag unique
fetch-depth: 0
# The models from aws-sdk-rust are needed to generate the full SDK for CI
- uses: actions/checkout@v4
with:
repository: awslabs/aws-sdk-rust
path: aws-sdk-rust
- name: Run ${{ matrix.actions.action }}
uses: ./smithy-rs/.github/actions/docker-build
with:
action: ${{ matrix.actions.action }}
# Test the code generator and other parts (styles and lints) that don't require
# code to have already been generated in order to run.
test-codegen:
name: Test Codegen
runs-on: ${{ matrix.test.runner }}
timeout-minutes: 35
# To avoid repeating setup boilerplate, we have the actual test commands
# in a matrix strategy. These commands get run in the steps after all the setup.
strategy:
fail-fast: false
matrix:
# These correspond to scripts in tools/ci-scripts that will be run in the Docker build image
test:
- action: check-aws-sdk-adhoc-tests
runner: smithy_ubuntu-latest_8-core
- action: check-client-codegen-integration-tests
runner: smithy_ubuntu-latest_8-core
- action: check-client-codegen-unit-tests
runner: smithy_ubuntu-latest_8-core
- action: check-core-codegen-unit-tests
runner: smithy_ubuntu-latest_8-core
- action: check-rust-runtimes
runner: smithy_ubuntu-latest_8-core
fetch-depth: 0
- action: check-sdk-codegen-unit-tests
runner: smithy_ubuntu-latest_8-core
- action: check-fuzzgen
runner: smithy_ubuntu-latest_8-core
- action: check-server-codegen-integration-tests
runner: smithy_ubuntu-latest_8-core
- action: check-server-codegen-integration-tests-python
runner: smithy_ubuntu-latest_8-core
- action: check-server-codegen-unit-tests
runner: smithy_ubuntu-latest_8-core
- action: check-server-codegen-unit-tests-python
runner: smithy_ubuntu-latest_8-core
- action: check-serde-codegen-unit-tests
runner: smithy_ubuntu-latest_8-core
- action: check-server-e2e-test
runner: smithy_ubuntu-latest_8-core
- action: check-server-python-e2e-test
runner: smithy_ubuntu-latest_8-core
- action: check-style-and-lints
runner: smithy_ubuntu-latest_8-core
- action: check-book
runner: smithy_ubuntu-latest_8-core
- action: check-tools
runner: smithy_ubuntu-latest_8-core
- action: check-deterministic-codegen
runner: smithy_ubuntu-latest_8-core
- action: check-codegen-version
runner: smithy_ubuntu-latest_8-core
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
ref: ${{ inputs.git_ref }}
# Defaults to 1 if not set
fetch-depth: ${{ matrix.test.fetch-depth }}
- name: Run ${{ matrix.test.action }}
uses: ./smithy-rs/.github/actions/docker-build
with:
action: ${{ matrix.test.action }}
# Separate from the main checks above because it uses aws-sdk-rust from GitHub
check-semver-hazards:
name: Check for semver hazards
runs-on: smithy_ubuntu-latest_8-core
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
with:
path: smithy-rs
ref: ${{ inputs.git_ref }}
fetch-depth: 0
- uses: actions/checkout@v4
with:
repository: awslabs/aws-sdk-rust
path: aws-sdk-rust
fetch-depth: 0
- name: Run check-semver-hazards
uses: ./smithy-rs/.github/actions/docker-build
with:
action: check-semver-hazards
# Test all the things that require generated code. Note: the Rust runtimes require codegen
# to be checked since `aws-config` depends on the generated STS client.
test-sdk:
name: Test the SDK
needs: generate
runs-on: ${{ matrix.test.runner }}
timeout-minutes: 45
# To avoid repeating setup boilerplate, we have the actual test commands
# in a matrix strategy. These commands get run in the steps after all the setup.
strategy:
fail-fast: false
matrix:
# These correspond to scripts in tools/ci-scripts that will be run in the Docker build image
test:
- action: check-aws-config
runner: smithy_ubuntu-latest_8-core
- action: check-aws-sdk-canary
runner: smithy_ubuntu-latest_8-core
- action: check-aws-sdk-cargo-deny
runner: smithy_ubuntu-latest_8-core
- action: check-only-aws-sdk-services
runner: smithy_ubuntu-latest_8-core
- action: check-aws-sdk-smoketest-docs-clippy-udeps
runner: smithy_ubuntu-latest_16-core
- action: check-aws-sdk-smoketest-unit-tests
runner: smithy_ubuntu-latest_8-core
- action: check-aws-sdk-standalone-integration-tests
runner: smithy_ubuntu-latest_8-core
- action: check-aws-sdk-benchmarks
runner: smithy_ubuntu-latest_8-core
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
ref: ${{ inputs.git_ref }}
- name: Run ${{ matrix.test.action }}
uses: ./smithy-rs/.github/actions/docker-build
with:
action: ${{ matrix.test.action }}
test-rust-windows:
name: Rust Tests on Windows
runs-on: windows-latest
timeout-minutes: 30
env:
# Disable incremental compilation to reduce disk space use
CARGO_INCREMENTAL: 0
RUSTDOCFLAGS: -D warnings
RUSTFLAGS: -D warnings
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.git_ref }}
# Pinned to the commit hash of v2.7.3
- uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84
with:
shared-key: ${{ runner.os }}-${{ env.rust_version }}-${{ github.job }}
workspaces: |
.
tools
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.rust_version }}
components: ${{ env.rust_toolchain_components }}
# To fix OpenSSL not found on Windows: https://github.com/sfackler/rust-openssl/issues/1542
- run: echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append
- run: vcpkg install openssl:x64-windows-static-md
- name: Run tests
shell: bash
run: tools/ci-scripts/test-windows.sh
# We make sure that smithy-rs can be compiled on platforms that are not
# natively supported by GitHub actions. We run as many tests as we can on
# those platforms, but not all of them, because they require a more
# complicated setup involving architecture emulation.
test-exotic-platform-support:
name: Exotic platform support
runs-on: ubuntu-latest
timeout-minutes: 25
env:
CROSS_CONFIG: Cross.toml
strategy:
fail-fast: false
# We always exclude `aws-smithy-http-server-python`, `aws-smithy-http-server-typescript`, and `aws-smithy-experimental` since they are experimental.
# We exclude `aws-smithy-http-client` due to FIPS related feature flags and aws-lc-fips target support
# We exclude `aws-smithy-wasm` because it is only meant to build for WASM targets
matrix:
include:
- target: i686-unknown-linux-gnu
build_smithy_rs_features: --all-features
build_aws_exclude: ''
build_smithy_rs_exclude: --exclude aws-smithy-http-server-python --exclude aws-smithy-http-server-typescript --exclude aws-smithy-experimental --exclude aws-smithy-http-client --exclude aws-smithy-wasm
test_smithy_rs_features: --all-features
test_aws_features: --all-features
test_aws_exclude: ''
test_smithy_rs_exclude: --exclude aws-smithy-http-server-python --exclude aws-smithy-http-server-typescript --exclude aws-smithy-experimental --exclude aws-smithy-http-client --exclude aws-smithy-wasm
- target: powerpc-unknown-linux-gnu
build_smithy_rs_features: ''
build_aws_exclude: --exclude aws-inlineable
build_smithy_rs_exclude: --exclude aws-smithy-http-server-python --exclude aws-smithy-http-server-typescript --exclude aws-smithy-experimental --exclude aws-smithy-http-client --exclude aws-smithy-http-server-metrics --exclude aws-smithy-http-server-metrics-macro --exclude aws-smithy-wasm
test_smithy_rs_features: ''
test_aws_features: ''
test_aws_exclude: --exclude aws-inlineable
test_smithy_rs_exclude: --exclude aws-smithy-http-server-python --exclude aws-smithy-http-server-typescript --exclude aws-smithy-experimental --exclude aws-smithy-http-client --exclude aws-smithy-http-server-metrics --exclude aws-smithy-http-server-metrics-macro --exclude aws-smithy-wasm
- target: powerpc64-unknown-linux-gnu
build_smithy_rs_features: ''
build_aws_exclude: --exclude aws-inlineable
build_smithy_rs_exclude: --exclude aws-smithy-http-server-python --exclude aws-smithy-http-server-typescript --exclude aws-smithy-experimental --exclude aws-smithy-http-client --exclude aws-smithy-wasm
test_smithy_rs_features: ''
test_aws_features: ''
test_aws_exclude: --exclude aws-inlineable
test_smithy_rs_exclude: --exclude aws-smithy-http-server-python --exclude aws-smithy-http-server-typescript --exclude aws-smithy-experimental --exclude aws-smithy-http-client --exclude aws-smithy-wasm
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ inputs.git_ref }}
# Pinned to the commit hash of v2.7.3
- uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84
with:
shared-key: ${{ runner.os }}-${{ env.rust_version }}-${{ github.job }}-${{ matrix.target }}
workspaces: |
.
tools
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.rust_version }}
components: ${{ env.rust_toolchain_components }}
targets: ${{ matrix.target }}
- name: Sets OpenSSL env vars on i686
run: |
echo "OPENSSL_LIB_DIR=/usr/lib/i386-linux-gnu" >> $GITHUB_ENV
echo "OPENSSL_INCLUDE_DIR=/usr/include/i386-linux-gnu" >> $GITHUB_ENV
if: matrix.target == 'i686-unknown-linux-gnu'
- name: Sets OpenSSL env vars on ppc and ppc64
run: |
echo "OPENSSL_DIR=/openssl" >> $GITHUB_ENV
if: matrix.target != 'i686-unknown-linux-gnu'
- name: Configure cross
shell: bash
# configure and cross compile openssl locally on ppc and ppc64 to be able to run aws-smithy-client tests.
# since cross dropped support for openssl, we use the build script from version 0.16.
run: |
cargo install cross --locked --version 0.2.4
cat > Cross.toml << EOF
[target.i686-unknown-linux-gnu]
pre-build = ["dpkg --add-architecture i386", "apt-get update && apt-get install --assume-yes pkg-config:i386 libssl-dev:i386"]
[target.i686-unknown-linux-gnu.env]
passthrough = [
"OPENSSL_LIB_DIR",
"OPENSSL_INCLUDE_DIR",
]
[target.powerpc-unknown-linux-gnu]
pre-build = ["curl -L -s https://github.com/cross-rs/cross/raw/c183ee37a9dc6b0e6b6a6ac9c918173137bad4ef/docker/openssl.sh | sed 's/curl https/curl -L https/' > /tmp/openssl.sh && bash /tmp/openssl.sh linux-ppc powerpc-linux-gnu-"]
[target.powerpc-unknown-linux-gnu.env]
passthrough = ["OPENSSL_DIR"]
[target.powerpc64-unknown-linux-gnu]
pre-build = ["curl -L -s https://github.com/cross-rs/cross/raw/c183ee37a9dc6b0e6b6a6ac9c918173137bad4ef/docker/openssl.sh | sed 's/curl https/curl -L https/' > /tmp/openssl.sh && bash /tmp/openssl.sh linux-ppc64 powerpc64-linux-gnu-"]
[target.powerpc64-unknown-linux-gnu.env]
passthrough = ["OPENSSL_DIR"]
EOF
- name: Build Smithy-rs rust-runtime crates
shell: bash
run: cross build -vv --target ${{ matrix.target }} --manifest-path "rust-runtime/Cargo.toml" ${{ matrix.build_smithy_rs_exclude }} --workspace ${{ matrix.build_smithy_rs_features }}
- name: Build AWS rust-runtime crates
shell: bash
run: cross build -vv --target ${{ matrix.target }} --manifest-path "aws/rust-runtime/Cargo.toml" ${{ matrix.build_aws_exclude }} --workspace
- name: Test Smithy-rs rust-runtime crates
shell: bash
run: cross test --target ${{ matrix.target }} --manifest-path "rust-runtime/Cargo.toml" ${{ matrix.test_smithy_rs_exclude }} --workspace ${{ matrix.test_smithy_rs_features }}
- name: Test AWS rust-runtime crates
shell: bash
run: cross test --target ${{ matrix.target }} --manifest-path "aws/rust-runtime/Cargo.toml" ${{ matrix.test_aws_exclude }} --workspace ${{ matrix.test_aws_features }}
# Run the canary against generated SDKs
#
# In addition to Matrix Success, this job will also be required to pass for merge.
# CI execution from forked repositories will skip this job, and when it does
# this skipped job will report its status as "Success".
# https://docs.github.com/en/actions/using-jobs/using-conditions-to-control-job-execution#overview
canary:
name: Canary
if: ${{ inputs.run_canary }}
needs: generate
runs-on: smithy_ubuntu-latest_8-core
timeout-minutes: 30
permissions:
id-token: write
contents: read
actions: read
pull-requests: read
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
ref: ${{ inputs.git_ref }}
- name: Configure credentials
id: creds
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: us-west-2
role-to-assume: ${{ secrets.CANARY_GITHUB_ACTIONS_ROLE_ARN }}
output-credentials: true
- name: Run canary
uses: ./smithy-rs/.github/actions/docker-build
with:
action: run-canary
action-arguments: ${{ secrets.CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME }} ${{ steps.creds.outputs.aws-access-key-id }} ${{ steps.creds.outputs.aws-secret-access-key }} ${{ steps.creds.outputs.aws-session-token }}
# This is always a failing job since forked repositories do not have necessary repository secrets
# to run the PR bot workflow or the canary workflow
ask-maintainer-to-run-pr-bot-and-canary:
name: Ask maintainer to run the PR bot and canary workflows
if: ${{ !inputs.run_canary }}
runs-on: ubuntu-latest
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- run: |
echo "PR bot and canary cannot be invoked from a forked repository. Ask a maintainer to manually invoke them using your PR."
exit 1
# Pseudo-job that depends on matrix jobs so that we don't have to enter
# the myriad of test matrix combinations into GitHub's protected branch rules
require-all:
needs:
- generate
- test-codegen
- check-semver-hazards
- test-sdk
- test-rust-windows
- test-exotic-platform-support
# Run this job even if its dependency jobs fail
if: always()
runs-on: ubuntu-latest
name: Matrix Success
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Verify jobs succeeded
# Pinned to commit hash of v1.2.2
uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe
with:
jobs: ${{ toJSON(needs) }}
================================================
FILE: .github/workflows/claim-crate-names.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# This workflow claims the names of the unpublished crates in this repository
# on crates.io (by publishing a dummy empty package)
# Allow only one crate claim workflow to run at a time
concurrency:
group: claim-crates-smithy-rs
cancel-in-progress: true
env:
rust_version: 1.91.1
name: Claim unpublished crate names on crates.io
run-name: ${{ github.workflow }}
on:
# It runs daily, but it can also be triggered on demand.
workflow_dispatch:
schedule:
- cron: 0 11 * * * # run at 11:00 UTC (morning) every day
jobs:
main-branch-check:
name: Check that workflow is running in main
runs-on: ubuntu-latest
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Main branch check
if: ${{ github.ref_name != 'main' }}
uses: actions/github-script@v7
with:
script: |
core.setFailed("This workflow can only be ran on main (current branch: ${{ github.ref_name }})")
# This job will be a no-op if an image was already built on main by another workflow.
acquire-base-image:
name: Acquire Base Image
permissions:
id-token: write
contents: read
needs:
- main-branch-check
runs-on: ubuntu-latest
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
fetch-depth: 0
- uses: ./smithy-rs/.github/actions/free-disk-space
- name: Acquire base image
id: acquire
run: ./smithy-rs/.github/scripts/acquire-build-image
- name: Upload base image
uses: actions/upload-artifact@v4
with:
name: smithy-rs-base-image
path: smithy-rs-base-image
retention-days: 1
claim:
name: Claim crate names
needs:
- main-branch-check
- acquire-base-image
runs-on: ubuntu-latest
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.rust_version }}
- name: Checkout smithy-rs
uses: actions/checkout@v4
- name: Publish to crates.io
shell: bash
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN }}
run: |
cargo install --path tools/ci-build/publisher
# Verify the publisher tool installed successfully
publisher --version
publisher claim-crate-names -y
================================================
FILE: .github/workflows/credentials-verification.yml
================================================
name: Daily credentials verification
on:
schedule:
# Runs 00:00 UTC every day
- cron: 0 0 * * *
workflow_dispatch:
jobs:
# Verifies the token used by the bot to publish crates to crates.io
verify-crates-io-token:
name: Verify Crates.io Token
if: github.repository == 'smithy-lang/smithy-rs'
runs-on: ubuntu-latest
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Checkout smithy-rs
uses: actions/checkout@v4
- name: Verify Crates.io Token
shell: bash
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN }}
run: |
echo "Checking cargo auth token..."
# "cargo login" only saves a token and does not actually use it, so we use "cargo yank" to verify the token.
# This version has already been yanked, so it is safe to execute the command below repeatedly.
# This command succeeds if we have a token with permission to yank the crate.
cargo yank aws-sigv4 --version 0.55.0
- name: Notify Slack on Failure
if: failure()
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
run: |
curl -X POST "${SLACK_WEBHOOK_URL}" -H 'Content-type: application/json' \
--data '{"workflow_msg":"⚠️ Invalid crates.io token. Create a new token as soon as possible!"}'
# Verifies the token used to perform actions on the repository on behalf of the bot user
verify-personal-access-token:
name: Verify Personal Access Token
if: github.repository == 'smithy-lang/smithy-rs'
runs-on: ubuntu-latest
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Checkout smithy-rs
# To test the validity of the personal access token, we only need to perform checkout with the specified token.
uses: actions/checkout@v4
with:
token: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }}
- name: Notify Slack on Failure
if: failure()
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
run: |
curl -X POST "${SLACK_WEBHOOK_URL}" -H 'Content-type: application/json' \
--data '{"workflow_msg":"⚠️ Invalid GitHub personal access token. Create a new token as soon as possible!"}'
================================================
FILE: .github/workflows/dry-run-release-scheduled.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# This workflow performs a scheduled dry-run for smithy-rs release.
# When run, it only produces release artifacts, but will not cut a release tag in GitHub or publish to crates.io.
name: Scheduled smithy-rs dry-run release
run-name: ${{ github.workflow }}
on:
schedule:
# Runs 00:00 UTC every day
- cron: 0 0 * * *
permissions:
actions: read
contents: read
id-token: write
pull-requests: read
jobs:
smithy-rs-scheduled-dry-run-release:
name: Scheduled dry-run release
if: github.repository == 'smithy-lang/smithy-rs'
uses: ./.github/workflows/release.yml
with:
commit_sha: main
dry_run: true
# If the automation runs this workflow in the background, we might as well run the full CI to catch any potential issues.
skip_ci: false
secrets:
RELEASE_AUTOMATION_BOT_PAT: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }}
RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN: ${{ secrets.RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN }}
CANARY_GITHUB_ACTIONS_ROLE_ARN: ${{ secrets.CANARY_GITHUB_ACTIONS_ROLE_ARN }}
CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME: ${{ secrets.CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME }}
SMITHY_RS_ECR_PUSH_ROLE_ARN: ${{ secrets.SMITHY_RS_ECR_PUSH_ROLE_ARN }}
MAVEN_CENTRAL_GPG_PUBLIC_KEY_SECRET_ARN: ${{ secrets.MAVEN_CENTRAL_GPG_PUBLIC_KEY_SECRET_ARN }}
MAVEN_CENTRAL_GPG_PRIVATE_KEY_SECRET_ARN: ${{ secrets.MAVEN_CENTRAL_GPG_PRIVATE_KEY_SECRET_ARN }}
MAVEN_CENTRAL_GPG_PASSPHRASE_SECRET_ARN: ${{ secrets.MAVEN_CENTRAL_GPG_PASSPHRASE_SECRET_ARN }}
MAVEN_CENTRAL_SONATYPE_CREDENTIALS_SECRET_ARN: ${{ secrets.MAVEN_CENTRAL_SONATYPE_CREDENTIALS_SECRET_ARN }}
================================================
FILE: .github/workflows/dry-run-release.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# This workflow performs a manual dry-run for smithy-rs release.
# When run, it only produces release artifacts, but will not cut a release tag in GitHub or publish to crates.io.
name: Smithy-rs dry-run release
run-name: ${{ github.workflow }}-${{ inputs.commit_sha }}
on:
workflow_dispatch:
inputs:
commit_sha:
description: |
Commit SHA: The SHA of the git commit that you want to release.
You must use the non-abbreviated SHA (e.g. b2318b0 won't work!).
Alternatively, you can use the name of a branch.
required: true
type: string
skip_ci:
description: Skip CI
required: true
type: boolean
default: true
permissions:
actions: read
contents: read
id-token: write
pull-requests: read
jobs:
smithy-rs-manual-dry-run-release:
name: Manual dry run release
if: ${{ github.event_name == 'workflow_dispatch' }}
uses: ./.github/workflows/release.yml
with:
commit_sha: ${{ inputs.commit_sha }}
dry_run: true
skip_ci: ${{ inputs.skip_ci }}
secrets:
RELEASE_AUTOMATION_BOT_PAT: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }}
RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN: ${{ secrets.RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN }}
CANARY_GITHUB_ACTIONS_ROLE_ARN: ${{ secrets.CANARY_GITHUB_ACTIONS_ROLE_ARN }}
CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME: ${{ secrets.CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME }}
SMITHY_RS_ECR_PUSH_ROLE_ARN: ${{ secrets.SMITHY_RS_ECR_PUSH_ROLE_ARN }}
MAVEN_CENTRAL_GPG_PUBLIC_KEY_SECRET_ARN: ${{ secrets.MAVEN_CENTRAL_GPG_PUBLIC_KEY_SECRET_ARN }}
MAVEN_CENTRAL_GPG_PRIVATE_KEY_SECRET_ARN: ${{ secrets.MAVEN_CENTRAL_GPG_PRIVATE_KEY_SECRET_ARN }}
MAVEN_CENTRAL_GPG_PASSPHRASE_SECRET_ARN: ${{ secrets.MAVEN_CENTRAL_GPG_PASSPHRASE_SECRET_ARN }}
MAVEN_CENTRAL_SONATYPE_CREDENTIALS_SECRET_ARN: ${{ secrets.MAVEN_CENTRAL_SONATYPE_CREDENTIALS_SECRET_ARN }}
================================================
FILE: .github/workflows/github-pages.yml
================================================
on:
workflow_dispatch:
push:
branches: [main]
paths:
- design/**
name: Update GitHub Pages
env:
rust_version: 1.91.1
# Allow only one doc pages build to run at a time for the entire smithy-rs repo
concurrency:
group: github-pages-yml
cancel-in-progress: true
jobs:
build-and-deploy-docs:
if: github.repository == 'smithy-lang/smithy-rs'
runs-on: ubuntu-latest
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Checkout
uses: actions/checkout@v4
with:
persist-credentials: false
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.rust_version }}
- name: Generate docs
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config --local user.name "AWS SDK Rust Bot"
git config --local user.email "aws-sdk-rust-primary@amazon.com"
git remote set-url origin https://x-access-token:${GITHUB_TOKEN}@github.com/${{ github.repository }}
REV=$(git rev-parse --short HEAD)
pushd design &>/dev/null
cargo install mdbook
cargo install --locked mdbook-mermaid
mdbook build --dest-dir ../../output
popd &>/dev/null
git checkout --orphan github-pages
git rm --cached -r .
git clean -ffdx
mv ../output design
git add design
git commit -m "Design docs @ ${{ github.repository }}@${REV}"
git push origin github-pages --force
================================================
FILE: .github/workflows/manual-canary.yml
================================================
# This workflow allows maintainers to manually run the canary given an external contributor's pull request created from
# a forked repository, which does not have required repository secrets to execute the canary.
name: Invoke Canary as Maintainer
on:
workflow_dispatch:
inputs:
pull_request_number:
description: The PR number to invoke the canary for.
required: true
type: string
commit_sha:
description: The the full SHA for the HEAD commit of the PR
required: true
type: string
run-name: ${{ github.workflow }} for Pull Request ${{ inputs.pull_request_number }}
# Allow one instance of this workflow per pull request, and cancel older runs when new changes are pushed
concurrency:
group: manual-canary-${{ inputs.pull_request_number }}
cancel-in-progress: true
jobs:
get-pr-info:
name: Get PR info
runs-on: ubuntu-latest
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Get PR info
id: get-pr-info
uses: actions/github-script@v7
with:
script: |
const response = await github.rest.pulls.get({
pull_number: ${{ inputs.pull_request_number }},
owner: context.repo.owner,
repo: context.repo.repo,
});
const data = {
commit_sha: response.data.head.sha,
};
console.log("data:", data);
if(data.commit_sha !== "${{ inputs.commit_sha }}"){
throw new Error("Input SHA does not match retrieved SHA")
}
return data;
outputs:
pull_data: ${{ steps.get-pr-info.outputs.result }}
acquire-base-image:
name: Acquire Base Image
permissions:
id-token: write
contents: read
needs:
- get-pr-info
runs-on: ubuntu-latest
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
# The ref used needs to match the HEAD revision of the PR being diffed, or else
# the `docker-build` action won't find the built Docker image.
ref: ${{ inputs.commit_sha }}
fetch-depth: 0
- uses: ./smithy-rs/.github/actions/free-disk-space
- name: Acquire base image
id: acquire
run: ./smithy-rs/.github/scripts/acquire-build-image
- name: Upload base image
uses: actions/upload-artifact@v4
with:
name: smithy-rs-base-image
path: smithy-rs-base-image
retention-days: 1
generate:
name: Generate
needs:
- acquire-base-image
- get-pr-info
runs-on: smithy_ubuntu-latest_8-core
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
ref: ${{ inputs.commit_sha }}
- name: Generate a subset of SDKs for the canary
uses: ./smithy-rs/.github/actions/docker-build
with:
action: generate-aws-sdk-for-canary
canary:
name: Canary
needs:
- generate
- get-pr-info
runs-on: smithy_ubuntu-latest_8-core
permissions:
id-token: write
contents: read
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
ref: ${{ inputs.commit_sha }}
- name: Configure credentials
id: creds
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: us-west-2
role-to-assume: ${{ secrets.CANARY_GITHUB_ACTIONS_ROLE_ARN }}
output-credentials: true
- name: Run canary
uses: ./smithy-rs/.github/actions/docker-build
with:
action: run-canary
action-arguments: ${{ secrets.CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME }} ${{ steps.creds.outputs.aws-access-key-id }} ${{ steps.creds.outputs.aws-secret-access-key }} ${{ steps.creds.outputs.aws-session-token }}
================================================
FILE: .github/workflows/manual-pull-request-bot.yml
================================================
# This workflow allows maintainers to manually run the PR bot on a pull request to work around permissions
# issues that prevent it from working for non-maintainers.
name: Invoke PR Bot as Maintainer
on:
workflow_dispatch:
inputs:
pull_number:
description: The PR number to invoke the PR bot on.
required: true
type: string
commit_sha:
description: The the full SHA for the HEAD commit of the PR
required: true
type: string
permissions:
id-token: write
pull-requests: write
contents: read
jobs:
get-pr-info:
name: Get PR info
runs-on: ubuntu-latest
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Get PR info
id: get-pr-info
uses: actions/github-script@v7
with:
script: |
const response = await github.rest.pulls.get({
pull_number: ${{ inputs.pull_number }},
owner: context.repo.owner,
repo: context.repo.repo,
});
const data = {
base_revision: response.data.base.sha,
head_revision: response.data.head.sha,
};
console.log("data:", data);
if(data.head_revision !== "${{ inputs.commit_sha }}"){
throw new Error("Input SHA does not match retrieved SHA")
}
return data;
outputs:
pull_data: ${{ steps.get-pr-info.outputs.result }}
# This job detects if the PR made changes to build tools. If it did, then it builds a new
# build Docker image. Otherwise, it downloads a build image from Public ECR. In both cases,
# it uploads the image as a build artifact for other jobs to download and use.
acquire-base-image:
name: Acquire Base Image
permissions:
id-token: write
contents: read
needs:
- get-pr-info
runs-on: smithy_ubuntu-latest_8-core
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
# The ref used needs to match the HEAD revision of the PR being diffed, or else
# the `docker-build` action won't find the built Docker image. This has the unfortunate
# side effect that the codegen diff tool used is the one in the PR rather than in
# the branch this workflow was launched from.
ref: ${{ inputs.commit_sha }}
fetch-depth: 0
- uses: ./smithy-rs/.github/actions/free-disk-space
- name: Acquire base image
id: acquire
run: ./smithy-rs/.github/scripts/acquire-build-image
- name: Upload base image
uses: actions/upload-artifact@v4
with:
name: smithy-rs-base-image
path: smithy-rs-base-image
retention-days: 1
invoke-pr-bot:
name: PR Bot
needs:
- acquire-base-image
- get-pr-info
uses: ./.github/workflows/pull-request-bot.yml
with:
issue_number: ${{ inputs.pull_number }}
base_revision: ${{ fromJSON(needs.get-pr-info.outputs.pull_data).base_revision }}
head_revision: ${{ inputs.commit_sha }}
secrets:
SMITHY_RS_PULL_REQUEST_CDN_S3_BUCKET_NAME: ${{ secrets.SMITHY_RS_PULL_REQUEST_CDN_S3_BUCKET_NAME }}
SMITHY_RS_PULL_REQUEST_CDN_ROLE_ARN: ${{ secrets.SMITHY_RS_PULL_REQUEST_CDN_ROLE_ARN }}
================================================
FILE: .github/workflows/manual-update-lockfiles.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
name: Update lockfiles manually
run-name: ${{ github.workflow }} (${{ inputs.base_branch }})
on:
workflow_dispatch:
inputs:
base_branch:
description: The name of the branch on which to run `cargo update` for lockfiles
required: true
type: string
force_update_on_broken_dependencies:
description: When true, it forces `cargo update` to update broken dependencies to the latest semver-compatible versions, without downgrading them to the last known working versions
required: true
type: boolean
default: false
permissions:
contents: read
id-token: write
concurrency:
group: ${{ github.workflow }}-${{ inputs.base_branch }}
cancel-in-progress: true
jobs:
cargo-update-runtime-lockfiles-and-sdk-lockfile:
name: Run cargo update on the runtime lockfiles and the SDK lockfile
if: ${{ github.event_name == 'workflow_dispatch' }}
uses: ./.github/workflows/pull-request-updating-lockfiles.yml
with:
base_branch: ${{ inputs.base_branch }}
force_update_on_broken_dependencies: ${{ inputs.force_update_on_broken_dependencies }}
secrets:
DOCKER_LOGIN_TOKEN_PASSPHRASE: ${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }}
SMITHY_RS_ECR_PUSH_ROLE_ARN: ${{ secrets.SMITHY_RS_ECR_PUSH_ROLE_ARN }}
RELEASE_AUTOMATION_BOT_PAT: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }}
================================================
FILE: .github/workflows/prod-release.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# This workflow performs a production smithy-rs release. It will cut a release tag in GitHub and publish to crates.io.
# It is idempotent (e.g. won't publish the same crates to crates.io twice), so we can run it repeatedly until it succeeds.
name: Smithy-rs prod release
run-name: ${{ github.workflow }} (${{ inputs.commit_sha }})
on:
workflow_dispatch:
inputs:
commit_sha:
description: |
Commit SHA: The SHA of the git commit that you want to release.
You must use the non-abbreviated SHA (e.g. b2318b0 won't work!).
Alternatively, you can use the name of a branch.
required: true
type: string
permissions:
actions: read
contents: read
id-token: write
pull-requests: read
jobs:
smithy-rs-prod-release:
name: Prod release
uses: ./.github/workflows/release.yml
with:
commit_sha: ${{ inputs.commit_sha }}
dry_run: false
skip_ci: false
secrets:
RELEASE_AUTOMATION_BOT_PAT: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }}
RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN: ${{ secrets.RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN }}
CANARY_GITHUB_ACTIONS_ROLE_ARN: ${{ secrets.CANARY_GITHUB_ACTIONS_ROLE_ARN }}
CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME: ${{ secrets.CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME }}
SMITHY_RS_ECR_PUSH_ROLE_ARN: ${{ secrets.SMITHY_RS_ECR_PUSH_ROLE_ARN }}
MAVEN_CENTRAL_GPG_PUBLIC_KEY_SECRET_ARN: ${{ secrets.MAVEN_CENTRAL_GPG_PUBLIC_KEY_SECRET_ARN }}
MAVEN_CENTRAL_GPG_PRIVATE_KEY_SECRET_ARN: ${{ secrets.MAVEN_CENTRAL_GPG_PRIVATE_KEY_SECRET_ARN }}
MAVEN_CENTRAL_GPG_PASSPHRASE_SECRET_ARN: ${{ secrets.MAVEN_CENTRAL_GPG_PASSPHRASE_SECRET_ARN }}
MAVEN_CENTRAL_SONATYPE_CREDENTIALS_SECRET_ARN: ${{ secrets.MAVEN_CENTRAL_SONATYPE_CREDENTIALS_SECRET_ARN }}
================================================
FILE: .github/workflows/pull-request-bot.yml
================================================
# This job will generate a codegen diff, upload it to S3, and link to it in a comment on the PR.
name: PR Bot
on:
workflow_call:
inputs:
issue_number:
description: The issue number to post the diff comment to.
required: true
type: string
base_revision:
description: Base git revision.
required: true
type: string
head_revision:
description: Head git revision.
required: true
type: string
secrets:
SMITHY_RS_PULL_REQUEST_CDN_S3_BUCKET_NAME:
required: true
SMITHY_RS_PULL_REQUEST_CDN_ROLE_ARN:
required: true
# the docker login password for ECR (encrypted with the DOCKER_LOGIN_TOKEN_PASSPHRASE)
ENCRYPTED_DOCKER_PASSWORD:
required: false
DOCKER_LOGIN_TOKEN_PASSPHRASE:
required: false
# Allow one instance of this workflow per pull request, and cancel older runs when new changes are pushed
concurrency:
group: pull-request-bot-yml-${{ inputs.issue_number }}
cancel-in-progress: true
env:
apt_dependencies: libssl-dev gnuplot jq
java_version: 17
rust_toolchain_components: clippy,rustfmt
rust_nightly_version: nightly-2025-10-18
ENCRYPTED_DOCKER_PASSWORD: ${{ secrets.ENCRYPTED_DOCKER_PASSWORD }}
DOCKER_LOGIN_TOKEN_PASSPHRASE: ${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }}
jobs:
generate-diff:
runs-on: smithy_ubuntu-latest_8-core
name: Generate diff and upload to S3
env:
AWS_REGION: us-west-2
S3_BUCKET_NAME: ${{ secrets.SMITHY_RS_PULL_REQUEST_CDN_S3_BUCKET_NAME }}
permissions:
id-token: write
contents: read
pull-requests: write
outputs:
bot-message: ${{ steps.generate-diff.outputs.bot-message }}
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
ref: ${{ inputs.head_revision }}
- name: Generate diff
uses: ./smithy-rs/.github/actions/docker-build
with:
action: generate-codegen-diff
action-arguments: ${{ inputs.base_revision }}
- uses: aws-actions/configure-aws-credentials@v4
name: Acquire credentials for uploading to S3
with:
role-to-assume: ${{ secrets.SMITHY_RS_PULL_REQUEST_CDN_ROLE_ARN }}
role-session-name: GitHubActions
aws-region: us-west-2
- name: Upload diff to S3
run: |
if [[ -d artifacts/codegen-diff/${{ inputs.base_revision }} ]]; then
aws s3 cp artifacts/codegen-diff/${{ inputs.base_revision }} \
"s3://${S3_BUCKET_NAME}/codegen-diff/${{ inputs.base_revision }}" --recursive
fi
generate-doc-preview:
runs-on: smithy_ubuntu-latest_8-core
name: Generate rustdoc preview and upload to S3
env:
AWS_REGION: us-west-2
S3_BUCKET_NAME: ${{ secrets.SMITHY_RS_PULL_REQUEST_CDN_S3_BUCKET_NAME }}
permissions:
id-token: write
contents: read
pull-requests: write
outputs:
bot-message: ${{ steps.generate-preview.outputs.bot-message }}
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
name: Gradle Cache
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
restore-keys: |
${{ runner.os }}-gradle-
# JDK is needed to generate code
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: corretto
java-package: jdk
java-version: ${{ env.java_version }}
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.rust_nightly_version }}
- name: Generate doc preview
id: generate-preview
# Only generate three of the smallest services since the doc build can be very large. STS, SSO, and SignIn must be
# included since aws-config depends on them. Transcribe Streaming and DynamoDB (paginators/waiters) were chosen
# below to stay small while still representing most features. Combined, they are about ~20MB at time of writing.
run: |
./gradlew -Paws.services=+sts,+sso,+ssooidc,+signin,+transcribestreaming,+dynamodb :aws:sdk:assemble
# Copy the Server runtime crate(s) in
cp -r rust-runtime/aws-smithy-http-server rust-runtime/aws-smithy-http-server-python rust-runtime/aws-smithy-http-server-typescript rust-runtime/aws-smithy-legacy-http-server aws/sdk/build/aws-sdk/sdk
pushd aws/sdk/build/aws-sdk
# Remove example crates from workspace
sed -i '/examples/d' Cargo.toml
# Add server runtime crates to the workspace
sed -i 's/"sdk\/sts",/"sdk\/sts","sdk\/aws-smithy-http-server","sdk\/aws-smithy-http-server-python","sdk\/aws-smithy-http-server-typescript","sdk\/aws-smithy-legacy-http-server",/' Cargo.toml
RUSTDOCFLAGS="--cfg docsrs" cargo +${{ env.rust_nightly_version }} doc --all-features --no-deps
popd
./tools/ci-scripts/generate-doc-preview-index.sh ${{ inputs.base_revision }}
echo 'bot-message=A [new doc preview](https://d2luzm2xt3nokh.cloudfront.net/docs/'${{ inputs.head_revision }}'/index.html) is ready to view.' >> "${GITHUB_OUTPUT}"
- uses: aws-actions/configure-aws-credentials@v4
name: Acquire credentials for uploading to S3
with:
role-to-assume: ${{ secrets.SMITHY_RS_PULL_REQUEST_CDN_ROLE_ARN }}
role-session-name: GitHubActions
aws-region: us-west-2
- name: Upload doc preview to S3
run: |
aws s3 cp target/doc "s3://${S3_BUCKET_NAME}/docs/${{ inputs.head_revision }}" --recursive
post-bot-comment:
needs:
- generate-diff
- generate-doc-preview
runs-on: ubuntu-latest
name: Post bot comment
permissions:
id-token: write
contents: read
pull-requests: write
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
- name: Download all artifacts
uses: ./smithy-rs/.github/actions/download-all-artifacts
- name: Set bot message outputs
id: bot-messages
run: |
set -eux
echo "codegen-diff=$(cat ./bot-message-codegen-diff)" >> "${GITHUB_OUTPUT}"
- name: Post bot comment
uses: actions/github-script@v7
with:
script: |
await github.rest.issues.createComment({
issue_number: ${{ inputs.issue_number }},
owner: context.repo.owner,
repo: context.repo.repo,
body: '${{ steps.bot-messages.outputs.codegen-diff }}\n\n' +
'${{ needs.generate-doc-preview.outputs.bot-message }}\n\n'
})
================================================
FILE: .github/workflows/pull-request-updating-lockfiles.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# This is a shared workflow used by both `update-lockfiles.yml` and `manual-update-lockfiles.yml`.
name: Pull Request for Updating Lockfiles
on:
workflow_call:
inputs:
base_branch:
description: The name of the branch on which to run `cargo update` for lockfiles
required: true
type: string
force_update_on_broken_dependencies:
description: When true, it forces `cargo update` to update broken dependencies to the latest semver-compatible versions, without downgrading them to the last known working versions
required: true
type: boolean
secrets:
DOCKER_LOGIN_TOKEN_PASSPHRASE:
required: true
SMITHY_RS_ECR_PUSH_ROLE_ARN:
required: true
RELEASE_AUTOMATION_BOT_PAT:
required: true
jobs:
save-docker-login-token:
name: Save a docker login token
timeout-minutes: 10
outputs:
docker-login-password: ${{ steps.set-token.outputs.docker-login-password }}
permissions:
id-token: write
contents: read
continue-on-error: true
runs-on: ubuntu-latest
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Attempt to load a docker login password
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.SMITHY_RS_ECR_PUSH_ROLE_ARN }}
role-session-name: GitHubActions
aws-region: us-west-2
- name: Save the docker login password to the output
id: set-token
run: |
ENCRYPTED_PAYLOAD=$(
gpg --symmetric --batch --passphrase "${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }}" --output - <(aws ecr get-login-password --region us-west-2) | base64 -w0
)
echo "docker-login-password=$ENCRYPTED_PAYLOAD" >> $GITHUB_OUTPUT
acquire-base-image:
name: Acquire Base Image
needs: save-docker-login-token
runs-on: ubuntu-latest
timeout-minutes: 60
env:
ENCRYPTED_DOCKER_PASSWORD: ${{ needs.save-docker-login-token.outputs.docker-login-password }}
DOCKER_LOGIN_TOKEN_PASSPHRASE: ${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }}
permissions:
id-token: write
contents: read
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
- uses: ./smithy-rs/.github/actions/free-disk-space
- name: Acquire base image
id: acquire
env:
DOCKER_BUILDKIT: 1
run: ./smithy-rs/.github/scripts/acquire-build-image
- name: Acquire credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.SMITHY_RS_ECR_PUSH_ROLE_ARN }}
role-session-name: GitHubActions
aws-region: us-west-2
- name: Upload image
run: |
IMAGE_TAG="ci-$(./smithy-rs/.github/scripts/docker-image-hash)"
./smithy-rs/.github/scripts/upload-build-image.sh $IMAGE_TAG
create-pull-request-for-updating-lockfiles:
name: Create a Pull Request for updating lockfiles
needs:
- save-docker-login-token
- acquire-base-image
runs-on: ubuntu-latest
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Checkout smithy-rs
uses: actions/checkout@v4
with:
path: smithy-rs
token: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }}
- name: Create branch name for updating lockfiles
id: branch-name-for-updating-lockfiles
shell: bash
run: |
branch_name="update-all-lockfiles-$(date +%s)"
echo "branch_name=${branch_name}" > $GITHUB_OUTPUT
- name: Cargo update all lockfiles
env:
ENCRYPTED_DOCKER_PASSWORD: ${{ needs.save-docker-login-token.outputs.docker-login-password }}
DOCKER_LOGIN_TOKEN_PASSPHRASE: ${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }}
uses: ./smithy-rs/.github/actions/docker-build
with:
action: cargo-update-lockfiles
action-arguments: ${{ inputs.base_branch }} ${{ steps.branch-name-for-updating-lockfiles.outputs.branch_name }} ${{ inputs.force_update_on_broken_dependencies }}
- name: Create pull request
working-directory: smithy-rs
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }}
run: |
echo -e 'If CI fails, commit the necessary fixes to this PR until all checks pass.\n\nIf changes are required to [crateNameToLastKnownWorkingVersions](https://github.com/smithy-lang/smithy-rs/blob/92916b5484cdfef9ff58540ebf5e845eeeccf860/aws/sdk/build.gradle.kts#L504), revert the first commit in the PR, run `./gradlew aws:sdk:cargoUpdateAllLockfiles`, and commit the updated lockfiles.' | \
gh pr create \
--title 'Run `cargo update` on the runtime lockfiles and the SDK lockfile' \
--base ${{ inputs.base_branch }} \
--head ${{ steps.branch-name-for-updating-lockfiles.outputs.branch_name }} \
--label "needs-sdk-review" \
--body-file -
================================================
FILE: .github/workflows/release-scripts/create-release.js
================================================
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
// This script is used by the release.yml GitHub Actions workflow to idempotently
// create a tagged GitHub release from the generated release manifest file.
const assert = require("assert");
const fs = require("fs");
const smithy_rs_repo = {
owner: "smithy-lang",
repo: "smithy-rs",
};
async function getExistingRelease(github, tag) {
try {
const response = await github.rest.repos.getReleaseByTag({ ...smithy_rs_repo, tag });
return { name: response.data.name, body: response.data.body };
} catch (error) {
if (error.status === 404) {
console.info(`No existing release found with tag '${tag}'`);
return null;
}
throw error;
}
}
function loadReleaseManifest(path) {
const releaseManifest = JSON.parse(fs.readFileSync(path));
console.info("Release manifest: ", releaseManifest);
assert(releaseManifest.tagName !== undefined, "release manifest must have a `tagName` field");
assert(releaseManifest.name !== undefined, "release manifest must have a `name` field");
assert(releaseManifest.body !== undefined, "release manifest must have a `body` field");
assert(releaseManifest.prerelease !== undefined, "release manifest must have a `prerelease` field");
return releaseManifest;
}
module.exports = async ({
// GitHub API (Octokit)
github,
// Boolean indicating if this is a dry-run release or not
isDryRun,
// Release manifest file path
releaseManifestPath,
// The commit-like reference that we want to release (e.g. a commit SHA or a branch name)
releaseCommitish,
}) => {
assert(github !== undefined, "The `github` argument is required");
assert(isDryRun !== undefined, "The `isDryRun` argument is required");
assert(releaseManifestPath !== undefined, "The `releaseManifestPath` argument is required");
assert(releaseCommitish !== undefined, "The `releaseCommitish` argument is required");
console.info(`Starting GitHub release creation with isDryRun: ${isDryRun}, and releaseManifestPath: '${releaseManifestPath}'`);
// Load the release manifest generated by the `changelogger` tool during build
const releaseManifest = loadReleaseManifest(releaseManifestPath);
// Idempotency check: Look up an existing GitHub release for the tag in the release manifest
const existingRelease = await getExistingRelease(github, releaseManifest.tagName);
if (existingRelease) {
console.info(`Found an existing release with tag '${releaseManifest.tagName}': `, existingRelease);
if (existingRelease.name !== releaseManifest.name || existingRelease.body !== releaseManifest.body) {
throw Error("FATAL: Existing release does not match the release manifest!");
} else {
console.info("SUCCESS: Existing release matches details in the release manifest. No work needs to be done!");
}
} else {
// Explicitly comparing against `false` to avoid accidental publish in the event that
// the `isDryRun` argument wasn't passed in correctly from the GitHub Actions workflow.
if (isDryRun === false) {
console.info("Not a dry-run; creating a new release...");
const response = await github.rest.repos.createRelease({
...smithy_rs_repo,
tag_name: releaseManifest.tagName,
name: releaseManifest.name,
body: releaseManifest.body,
prerelease: releaseManifest.prerelease,
target_commitish: releaseCommitish,
});
console.info(`SUCCESS: Created release with ID: ${response.data.id}, URL: ${response.data.html_url} `);
} else {
console.info("SUCCESS: Exiting early since this is a dry-run release.");
}
}
};
================================================
FILE: .github/workflows/release.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# This is the shared release workflow run by both `prod-release.yml` and `dry-run-release.yml'.
# A calling workflow will indicate whether it wants to run this with a prod run or a dry run.
# Allow only one release to run at a time
concurrency:
group: release-smithy-rs-${{ inputs.dry_run }}
cancel-in-progress: true
env:
rust_version: 1.91.1
name: Release smithy-rs
on:
workflow_call:
inputs:
commit_sha:
description: The SHA of the git commit that you want to release.
required: true
type: string
dry_run:
description: When true, it only produces release artifacts, but will not cut a release tag in GitHub or publish to crates.io.
required: true
type: boolean
skip_ci:
description: Skip CI when executing a release
required: true
type: boolean
secrets:
RELEASE_AUTOMATION_BOT_PAT:
required: true
RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN:
required: true
CANARY_GITHUB_ACTIONS_ROLE_ARN:
required: true
CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME:
required: true
SMITHY_RS_ECR_PUSH_ROLE_ARN:
required: true
MAVEN_CENTRAL_GPG_PUBLIC_KEY_SECRET_ARN:
required: true
MAVEN_CENTRAL_GPG_PRIVATE_KEY_SECRET_ARN:
required: true
MAVEN_CENTRAL_GPG_PASSPHRASE_SECRET_ARN:
required: true
MAVEN_CENTRAL_SONATYPE_CREDENTIALS_SECRET_ARN:
required: true
jobs:
check-actor-for-prod-run:
name: Check actor for prod run
if: inputs.dry_run == false
runs-on: ubuntu-latest
env:
ACTOR: ${{ github.actor }}
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Check actor for prod run
run: |
set -e
if [ "${ACTOR}" != "aws-sdk-rust-ci" ]; then
echo "Error: The current actor is '${ACTOR}' but only 'aws-sdk-rust-ci' is allowed to run a prod release workflow."
exit 1
fi
echo "The current actor is 'aws-sdk-rust-ci', continuing with the workflow."
# We'll need to build a base image to work against if:
# - a release was kicked off before the image build step triggered by a push to the release branch/main completed
# - a dry-run release was kicked off against a feature branch to test automation changes
# This job will be a no-op if an image had already been built.
acquire-base-image:
name: Acquire Base Image
permissions:
id-token: write
contents: read
needs:
- check-actor-for-prod-run
# We need `always` here otherwise this job won't run if the previous job has been skipped
# See https://samanpavel.medium.com/github-actions-conditional-job-execution-e6aa363d2867
if: |
always() &&
(needs.check-actor-for-prod-run.result == 'success' || needs.check-actor-for-prod-run.result == 'skipped')
runs-on: smithy_ubuntu-latest_16-core
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
ref: ${{ inputs.commit_sha }}
fetch-depth: 0
- uses: ./smithy-rs/.github/actions/free-disk-space
- name: Acquire credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.SMITHY_RS_ECR_PUSH_ROLE_ARN }}
role-session-name: GitHubActions
aws-region: us-west-2
- name: Acquire base image
id: acquire
run: ./smithy-rs/.github/scripts/acquire-build-image
- name: Upload base image
uses: actions/upload-artifact@v4
with:
name: smithy-rs-base-image
path: smithy-rs-base-image
retention-days: 1
release-ci:
name: Pre-release checks
# We need `always` here otherwise this job won't run if the previous job has been skipped
# See https://samanpavel.medium.com/github-actions-conditional-job-execution-e6aa363d2867
if: always() && inputs.skip_ci == false
needs:
- acquire-base-image
uses: ./.github/workflows/ci.yml
with:
git_ref: ${{ inputs.commit_sha }}
secrets:
CANARY_GITHUB_ACTIONS_ROLE_ARN: ${{ secrets.CANARY_GITHUB_ACTIONS_ROLE_ARN }}
CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME: ${{ secrets.CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME }}
check-semver-hazards:
name: Check for semver hazards
needs:
- acquire-base-image
# We need `always` here otherwise this job won't run if the previous job has been skipped
# See https://samanpavel.medium.com/github-actions-conditional-job-execution-e6aa363d2867
if: always()
runs-on: smithy_ubuntu-latest_8-core
steps:
- uses: actions/checkout@v4
with:
path: smithy-rs
ref: ${{ inputs.commit_sha }}
fetch-depth: 0
- uses: actions/checkout@v4
with:
repository: awslabs/aws-sdk-rust
path: aws-sdk-rust
fetch-depth: 0
- name: Run check-semver-hazards
uses: ./smithy-rs/.github/actions/docker-build
with:
action: check-semver-hazards
use_cache: false
get-or-create-release-branch:
name: Get or create a release branch
needs:
- acquire-base-image
- check-semver-hazards
- release-ci
# We need `always` here otherwise this job won't run if the previous job has been skipped
# See https://samanpavel.medium.com/github-actions-conditional-job-execution-e6aa363d2867
if: |
always() &&
needs.acquire-base-image.result == 'success' &&
(needs.release-ci.result == 'success' || needs.release-ci.result == 'skipped')
runs-on: ubuntu-latest
outputs:
release_branch: ${{ steps.branch-push.outputs.release_branch }}
new_release_series: ${{ steps.branch-push.outputs.new_release_series }}
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
ref: ${{ inputs.commit_sha }}
token: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }}
fetch-depth: 0
- name: Get or create release branch
id: branch-push
shell: bash
env:
DRY_RUN: ${{ inputs.dry_run }}
run: |
set -e
./.github/scripts/get-or-create-release-branch.sh output
cat output > $GITHUB_OUTPUT
release:
name: Release
needs:
- get-or-create-release-branch
# See https://github.com/actions/runner/issues/2205#issuecomment-1381988186 for an explanation as to why
# we need this here _even though_ the job we depend on is never skipped.
if: |
always() &&
!contains(needs.*.result, 'failure') &&
!contains(needs.*.result, 'cancelled')
runs-on: smithy_ubuntu-latest_16-core
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.rust_version }}
- name: Checkout smithy-rs
uses: actions/checkout@v4
with:
ref: ${{ inputs.commit_sha }}
path: smithy-rs
token: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }}
fetch-depth: 0
- name: Generate release artifacts
uses: ./smithy-rs/.github/actions/docker-build
with:
action: generate-smithy-rs-release
use_cache: false
- name: Download all artifacts
uses: ./smithy-rs/.github/actions/download-all-artifacts
# This step is not idempotent, as it pushes release artifacts to the `smithy-rs-release-1.x.y` branch. However,
# if this step succeeds but a subsequent step fails, retrying the release workflow is "safe" in that it does not
# create any inconsistent states; this step would simply fail because the release branch would be ahead of `main`
# due to previously pushed artifacts.
# To successfully retry a release, revert the commits in the release branch that pushed the artifacts.
- name: Push smithy-rs changes
shell: bash
working-directory: smithy-rs-release/smithy-rs
id: push-changelog
env:
RELEASE_BRANCH_NAME: ${{ needs.get-or-create-release-branch.outputs.release_branch }}
DRY_RUN: ${{ inputs.dry_run }}
run: |
if ! git diff-index --quiet HEAD; then
echo "Pushing release commits..."
# This will fail if we tried to release from a non-HEAD commit on the release branch.
# The only scenario where we would try to release a non-HEAD commit from the release branch is
# to retry a release action execution that failed due to a transient issue.
# In that case, we expect the commit to be releasable as-is, i.e. the changelog should have already
# been processed.
git fetch
if [[ "${DRY_RUN}" == "true" ]]; then
# During dry-runs, "git push" without "--force" can fail if smithy-rs-release-x.y.z-preview is behind
# smithy-rs-release-x.y.z, but that does not matter much during dry-runs.
git push --force origin "HEAD:refs/heads/${RELEASE_BRANCH_NAME}"
git push --dry-run origin "HEAD:refs/heads/${RELEASE_BRANCH_NAME}"
else
echo "attempting to push $(git rev-parse HEAD) to $RELEASE_BRANCH_NAME $(git rev-parse $RELEASE_BRANCH_NAME)"
git push origin "HEAD:refs/heads/${RELEASE_BRANCH_NAME}"
fi
fi
echo "commit_sha=$(git rev-parse HEAD)" > $GITHUB_OUTPUT
# This step is idempotent; the `publisher` will not publish a crate if the version is already published on crates.io.
- name: Publish to crates.io
shell: bash
working-directory: smithy-rs-release/crates-to-publish
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN }}
run: |
cargo install --path "$(realpath ../smithy-rs/tools/ci-build/publisher)"
# Verify the publisher tool installed successfully
publisher --version
if [[ "${{ inputs.dry_run }}" == "true" ]]; then
if [[ ! -f aws-smithy-types/Cargo.toml ]]; then
echo "Crates to publish not found!"
exit 1
fi
echo "Checking cargo auth token..."
# This version has already been yanked. This command succeeds if we have a token with permission to yank the crate.
cargo yank aws-sigv4 --version 0.55.0
else
publisher publish -y --location .
fi
# This step is not idempotent and MUST be performed last, as it will generate a new release in the `smithy-rs`
# repository with the release tag that is always unique and has an increasing numerical suffix.
- name: Tag release
uses: actions/github-script@v7
with:
github-token: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }}
script: |
const createReleaseScript = require("./smithy-rs/.github/workflows/release-scripts/create-release.js");
await createReleaseScript({
github,
isDryRun: ${{ inputs.dry_run }},
releaseManifestPath: "smithy-rs-release/smithy-rs-release-manifest.json",
releaseCommitish: "${{ steps.push-changelog.outputs.commit_sha }}"
});
publish-to-maven-central:
name: Publish Codegen artifacts to Maven Central
needs:
- release
if: always() && needs.release.result == 'success'
runs-on: smithy_ubuntu-latest_8-core
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
ref: ${{ inputs.commit_sha }}
fetch-depth: 0
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'
- name: Check if publishing is needed
id: check-publish
shell: bash
working-directory: smithy-rs
run: |
# Run the Gradle task to check if publishing is needed
./gradlew checkMavenCentralPublishingNeeded
# Read the result from the build
if grep -q "mavenCentralPublishingNeeded=true" build/maven-central/publishing.properties; then
echo "publish=true" >> $GITHUB_OUTPUT
else
echo "publish=false" >> $GITHUB_OUTPUT
fi
- name: Acquire credentials
if: steps.check-publish.outputs.publish == 'true'
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.SMITHY_RS_ECR_PUSH_ROLE_ARN }}
role-session-name: GitHubActions
aws-region: us-west-2
- name: Publish to Maven Central
if: steps.check-publish.outputs.publish == 'true'
shell: bash
working-directory: smithy-rs
env:
GPG_PUBLIC_KEY_SECRET_ARN: ${{ secrets.MAVEN_CENTRAL_GPG_PUBLIC_KEY_SECRET_ARN }}
GPG_PRIVATE_KEY_SECRET_ARN: ${{ secrets.MAVEN_CENTRAL_GPG_PRIVATE_KEY_SECRET_ARN }}
GPG_PASSPHRASE_SECRET_ARN: ${{ secrets.MAVEN_CENTRAL_GPG_PASSPHRASE_SECRET_ARN }}
SONATYPE_CREDENTIALS_SECRET_ARN: ${{ secrets.MAVEN_CENTRAL_SONATYPE_CREDENTIALS_SECRET_ARN }}
JRELEASER_DRY_RUN: ${{ inputs.dry_run }}
run: |
pwd
# Get secrets from AWS Secrets Manager
GPG_PUBLIC_KEY=$(aws secretsmanager get-secret-value --secret-id $GPG_PUBLIC_KEY_SECRET_ARN --query SecretString --output text)
GPG_PRIVATE_KEY=$(aws secretsmanager get-secret-value --secret-id $GPG_PRIVATE_KEY_SECRET_ARN --query SecretString --output text)
GPG_PASSPHRASE=$(aws secretsmanager get-secret-value --secret-id $GPG_PASSPHRASE_SECRET_ARN --query SecretString --output text)
# Get Sonatype credentials from JSON secret
SONATYPE_CREDS=$(aws secretsmanager get-secret-value --secret-id $SONATYPE_CREDENTIALS_SECRET_ARN --query SecretString --output text)
MAVEN_CENTRAL_USERNAME=$(echo $SONATYPE_CREDS | jq -r '.["sonatype-portal-token-username"]')
MAVEN_CENTRAL_TOKEN=$(echo $SONATYPE_CREDS | jq -r '.["sonatype-portal-token"]')
# Set up JReleaser environment variables
export JRELEASER_GPG_PUBLIC_KEY="$GPG_PUBLIC_KEY"
export JRELEASER_GPG_SECRET_KEY="$GPG_PRIVATE_KEY"
export JRELEASER_GPG_PASSPHRASE="$GPG_PASSPHRASE"
export JRELEASER_MAVENCENTRAL_USERNAME="$MAVEN_CENTRAL_USERNAME"
export JRELEASER_MAVENCENTRAL_TOKEN="$MAVEN_CENTRAL_TOKEN"
export JRELEASER_GENERIC_TOKEN=not-used-but-must-be-set
# Run Gradle publish task to stage outputs to build/m2 directory
./gradlew publish
ls -lsa build/m2/software/amazon/smithy/rust
./gradlew jreleaserConfig
./gradlew jreleaserFullRelease
# If this step fails for any reason, there's no need to retry the release workflow, as this step is auxiliary
# and the release itself was successful. Instead, manually trigger `backport-pull-request.yml`.
open-backport-pull-request:
name: Open backport pull request to merge the release branch back to main
needs:
- release
# See https://github.com/actions/runner/issues/2205#issuecomment-1381988186 for details on the workaround
if: inputs.dry_run == false && always() && needs.release.result == 'success'
uses: ./.github/workflows/backport-pull-request.yml
secrets:
RELEASE_AUTOMATION_BOT_PAT: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }}
publish-build-image:
name: Publish new smithy-rs-build-image tag to ECR
runs-on: smithy_ubuntu-latest_8-core
needs:
- acquire-base-image
- release
if: always() && needs.release.result == 'success'
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- uses: actions/checkout@v4
with:
path: smithy-rs
ref: ${{ inputs.commit_sha }}
fetch-depth: 0
- name: Download all artifacts
uses: ./smithy-rs/.github/actions/download-all-artifacts
- name: Acquire credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.SMITHY_RS_ECR_PUSH_ROLE_ARN }}
role-session-name: GitHubActions
aws-region: us-west-2
- name: Tag and upload new build image
env:
DRY_RUN: ${{ inputs.dry_run }}
shell: bash
run: |
set -x
ls -lsa
docker image ls
# re-load the already built image from previous acquire-build-image step
# image tags in CI are tagged as ci-<tools-dir-sha>
CI_IMAGE_TAG="ci-$(./smithy-rs/.github/scripts/docker-image-hash)"
docker load -i smithy-rs-base-image/smithy-rs-base-image
docker tag "smithy-rs-base-image:${CI_IMAGE_TAG}" "smithy-rs-base-image:local"
docker image ls
# running acquire-build-image with local builds turned off is mostly a no-op
# but it sets up the appropriate "local" tags needed for re-tagging
ALLOW_LOCAL_BUILD=false ./smithy-rs/.github/scripts/acquire-build-image
docker image ls
RELEASE_IMAGE_TAG=$(jq -r ".tagName" smithy-rs-release/smithy-rs-release-manifest.json)
./smithy-rs/.github/scripts/upload-build-image.sh $RELEASE_IMAGE_TAG
================================================
FILE: .github/workflows/update-lockfiles.yml
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
name: Update lockfiles scheduled
run-name: ${{ github.workflow }}
on:
schedule:
# Runs 22:00 UTC every Tuesday
- cron: 0 22 * * 2
permissions:
contents: read
id-token: write
jobs:
cargo-update-runtime-lockfiles-and-sdk-lockfile:
name: Run cargo update on the runtime lockfiles and the SDK lockfile
# Don't run on forked repositories
if: github.repository == 'smithy-lang/smithy-rs'
uses: ./.github/workflows/pull-request-updating-lockfiles.yml
with:
base_branch: main
force_update_on_broken_dependencies: false
secrets:
DOCKER_LOGIN_TOKEN_PASSPHRASE: ${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }}
SMITHY_RS_ECR_PUSH_ROLE_ARN: ${{ secrets.SMITHY_RS_ECR_PUSH_ROLE_ARN }}
RELEASE_AUTOMATION_BOT_PAT: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }}
================================================
FILE: .github/workflows/update-sdk-next.yml
================================================
# This workflow updates the `next` branch with freshly generated
# code from the latest smithy-rs and models that reside in aws-sdk-rust.
# Allow only one release to run at a time
concurrency:
group: update-aws-sdk-next
cancel-in-progress: true
name: Update `aws-sdk-rust/next`
on:
workflow_dispatch:
inputs:
generate_ref:
description: |
Which branch/commit/tag of smithy-rs to use to generate aws-sdk-rust/next. Defaults to `main`.
required: true
type: string
default: main
jobs:
update-next:
name: Update `next`
runs-on: ubuntu-latest
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
- name: Check out `smithy-rs`
uses: actions/checkout@v4
with:
repository: smithy-lang/smithy-rs
ref: ${{ inputs.generate_ref }}
path: smithy-rs
- name: Check out `aws-sdk-rust`
uses: actions/checkout@v4
with:
repository: awslabs/aws-sdk-rust
ref: main
path: aws-sdk-rust
token: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }}
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: corretto
java-package: jdk
java-version: 17
# Rust is only used to `rustfmt` the generated code; doesn't need to match MSRV
- name: Set up Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.91.1
- name: Delete old SDK
run: |
- name: Generate a fresh SDK
run: |
WORKSPACE="$(pwd)"
cd smithy-rs
./gradlew aws:sdk:assemble --info -Paws.sdk.models.path="${WORKSPACE}/aws-sdk-rust/aws-models"
- name: Update `aws-sdk-rust/next`
run: |
set -eux
cd aws-sdk-rust
git checkout origin/main -b next
# Delete the old SDK
rm -rf sdk examples tests
rm -f versions.toml Cargo.toml index.md
# Copy in the new SDK
mv ../smithy-rs/aws/sdk/build/aws-sdk/* .
git add .
git -c 'user.name=AWS SDK Rust Bot' -c 'user.email=aws-sdk-rust-primary@amazon.com' commit -m 'Update `aws-sdk-rust/next`' --allow-empty
git push origin next:next --force
================================================
FILE: .gitignore
================================================
# attn: Intellij related ignores belong in ~/.gitignore
# Java/Kotlin
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
# Gradle
.gradle
build/
**/bin/main/
**/bin/test/
# Ignore Gradle GUI config
gradle-app.setting
# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
!gradle-wrapper.jar
# Cache of project
.gradletasknamecache
# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898
# gradle/wrapper/gradle-wrapper.properties
# MacOS
.DS_Store
# Rust build artifacts
target/
# IDEs
.idea/
.vscode/
.project
.settings
.classpath
# tools
.tool-versions
# python
__pycache__
================================================
FILE: .pre-commit-config.yaml
================================================
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
exclude: ^aws/rust-runtime/(aws-sigv4/aws-sig-v4-test-suite/|aws-config/test-data/default-provider-chain/eks_pod_identity_credentials/fs/token.jwt$)
- id: trailing-whitespace
- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
rev: v2.11.0
hooks:
- id: pretty-format-yaml
args: [--autofix, --indent, '2']
- id: pretty-format-rust
entry: rustfmt --edition 2021
files: ^.*\.rs$
- repo: local
hooks:
- id: ktlint
name: Ktlint
entry: ./.pre-commit-hooks/ktlint.sh
language: system
files: ^.*\.kt$
- id: kotlin-block-quotes
name: Kotlin Block Quotes
entry: ./.pre-commit-hooks/kotlin-block-quotes.py
language: python
files: ^.*\.kt$
- id: sdk-lints-check
name: sdk-lints
entry: ./.pre-commit-hooks/sdk-lints.sh
language: system
files: ^.*$
pass_filenames: false
# Check that runtime crates are properly version bumped when changed
- id: runtime-versioner-check
name: runtime-versioner
entry: ./.pre-commit-hooks/runtime-versioner.sh
language: system
# Only run if the rust runtime files change
files: ^.*/?rust-runtime/.*$
pass_filenames: false
# Show the info messages from the runtime versioner that explain how things will publish
verbose: true
================================================
FILE: .pre-commit-hooks/kotlin-block-quotes.py
================================================
#!/usr/bin/env python
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Script for pre-commit that fixes Kotlin block quote indentation
# for Smithy codegen, where the actual whitespace in the block quotes
# doesn't actually matter.
#
# In anticipation that the script isn't perfect, it will not change any
# file if non-indentation changes were made. Instead, it fails and says
# where the ambiguous code is so that it can be touched up manually.
#
# To run unit tests, run this script directly with the `--self-test` arg.
# To test against the repository, run `pre-commit run --all --verbose`.
#
import re
import sys
import unittest
from enum import Enum
INDENT_SIZE = 4
# Chops of any line comment
def without_line_comment(line):
line_comment_start = line.find("//")
if line_comment_start != -1:
return line[:line_comment_start]
return line
def _calc_block_comment(line, direction):
regex = "(" + re.escape("/*") + "|" + re.escape("*/") + "|" + re.escape("//") + ")"
tokens = [m.string[m.start(0):m.end(0)] for m in re.finditer(regex, line)]
depth = 0
for token in tokens:
if direction > 0 and token == "//" and depth == 0:
break
elif token == "/*":
depth += direction
elif token == "*/":
depth -= direction
return depth > 0
# Returns True if the line starts a block comment
def starts_block_comment(line):
return _calc_block_comment(line, 1)
# Returns True if the line ends a block comment
def ends_block_comment(line):
return _calc_block_comment(line, -1)
# Returns True if the line starts or ends a block quote (depending on state)
def starts_or_ends_block_quote(line, inside_block_quotes):
regex = "(" + re.escape('"""') + "|" + re.escape("//") + ")"
tokens = [m.string[m.start(0):m.end(0)] for m in re.finditer(regex, line)]
start_value = inside_block_quotes
for token in tokens:
if not inside_block_quotes and token == "//":
break
elif token == '"""':
inside_block_quotes = not inside_block_quotes
return start_value != inside_block_quotes
# Returns the indentation of a line
def line_indent(line):
indent = re.search(r"[^\s]", line)
if indent != None:
return indent.start(0)
else:
return 0
# Changes the indentation of a line
def adjust_indent(line, indent):
old_indent = re.search(r"[^\s]", line)
if old_indent == None:
return line
line = line[old_indent.start(0):]
return (" " * indent) + line
# Parser state.
class State(Enum):
Default = 0 # Just started, or not inside a block comment or block quote
InsideBlockComment = 1
InsideBlockQuote = 2
# Fixes block quote indentation and returns a list of line numbers changed
def fix_lines(lines):
state = State.Default
changed = []
correct_indent = 0
correct_end_indent = 0
first_inner_indent = None
for index, line in enumerate(lines):
# Look for block quotes or block comments
if state == State.Default:
if starts_block_comment(line):
state = State.InsideBlockComment
elif starts_or_ends_block_quote(line, inside_block_quotes = False):
state = State.InsideBlockQuote
correct_end_indent = line_indent(line)
# Determine correct block comment indentation once one is found
if line.lstrip().startswith('"""'):
correct_indent = line_indent(line)
else:
correct_indent = line_indent(line) + INDENT_SIZE
first_inner_indent = None
# Skip all lines inside of block comments
elif state == State.InsideBlockComment:
if ends_block_comment(line):
state = State.Default
# Format block quotes
elif state == State.InsideBlockQuote:
if first_inner_indent == None and len(line.strip()) == 0:
continue
current_indent = line_indent(line)
# Track the first line's indentation inside of the block quote
# so that relative indentation can be preserved.
if first_inner_indent == None:
first_inner_indent = current_indent
# Handle the end of the block quote
if starts_or_ends_block_quote(line, inside_block_quotes = True):
if line.lstrip().startswith('"""') and current_indent != correct_end_indent:
lines[index] = adjust_indent(line, correct_end_indent)
changed.append(index + 1)
state = State.Default
else:
# Handle lines in the middle of the block quote
indent_relative_to_first = max(0, current_indent - first_inner_indent)
adjusted_indent = correct_indent + indent_relative_to_first
if current_indent != adjusted_indent:
lines[index] = adjust_indent(line, adjusted_indent)
changed.append(index + 1)
return changed
# Determines if the changes made were only to indentation
def only_changed_indentation(lines_before, lines_after):
if len(lines_before) != len(lines_after):
return False
for index in range(0, len(lines_before)):
if lines_before[index].lstrip() != lines_after[index].lstrip():
return False
return True
# Fixes the indentation in a file, and returns True if the file was changed
def fix_file(file_name):
lines = []
with open(file_name, "r") as file:
lines = file.readlines()
old_lines = lines[:]
changed_line_numbers = fix_lines(lines)
if len(changed_line_numbers) > 0 and old_lines != lines:
# This script isn't perfect, so if anything other than whitespace changed,
# then bail to avoid losing any code changes.
if not only_changed_indentation(old_lines, lines):
print("ERROR: `" + file_name + "`: Block quote indentation is wrong on lines " + str(changed_line_numbers) + \
". The pre-commit script can't fix it automatically in this instance.")
sys.exit(1)
else:
text = "".join(lines)
with open(file_name, "w") as file:
file.write(text)
print("INFO: Fixed indentation in `" + file_name + "`.")
return True
else:
# This print is useful when debugging this script, but spammy otherwise. Leave it commented.
# print("INFO: `" + file_name + "` is fine.")
return False
class SelfTest(unittest.TestCase):
def test_starts_block_comment(self):
assert(not starts_block_comment(""))
assert(not starts_block_comment("foo"))
assert(not starts_block_comment("/* false */"))
assert(not starts_block_comment(" /* false */"))
assert(not starts_block_comment(" /* false */ asdf"))
assert(not starts_block_comment(" asdf /* false */ asdf"))
assert(not starts_block_comment(" /* false */ /* false */"))
assert(not starts_block_comment(" /* false /* false */ */"))
assert(not starts_block_comment(" /* false /* false /* false */ */ */"))
assert(not starts_block_comment(" false */"))
assert(not starts_block_comment("/* false //*/"))
assert(not starts_block_comment(" /* false /* false /* false */ */ // */"))
assert(not starts_block_comment("// /* false"))
assert(starts_block_comment(" /* true *"))
assert(starts_block_comment(" /* true */ /*"))
assert(starts_block_comment(" /* true /* true /* true */ */"))
def test_ends_block_comment(self):
assert(not ends_block_comment(""))
assert(ends_block_comment("*/"))
assert(ends_block_comment("// */"))
assert(ends_block_comment(" */ asdf"))
assert(ends_block_comment(" asdf */ asdf"))
assert(not ends_block_comment(" /* asdf */ asdf"))
assert(not ends_block_comment(" /* true */ /*"))
assert(not ends_block_comment(" /* true /* true /* true */ */"))
def test_starts_or_ends_block_quote(self):
assert(not starts_or_ends_block_quote("", False))
assert(not starts_or_ends_block_quote(' """foo "bar" baz"""', False))
assert(not starts_or_ends_block_quote(' """foo "bar" baz""" test """foo"""', False))
assert(starts_or_ends_block_quote(' """foo "bar" baz""" test """foo', False))
assert(starts_or_ends_block_quote('"""', False))
assert(not starts_or_ends_block_quote('// """', False))
assert(starts_or_ends_block_quote('"""//""" """', False))
assert(not starts_or_ends_block_quote('"""//"""', False))
assert(starts_or_ends_block_quote('// """', True))
assert(starts_or_ends_block_quote('"""//""" """', True))
assert(starts_or_ends_block_quote('"""//"""', True))
def test_line_indent(self):
self.assertEqual(line_indent(""), 0)
self.assertEqual(line_indent(" "), 0)
self.assertEqual(line_indent(" foo"), 3)
self.assertEqual(line_indent(" foo bar"), 3)
def test_adjust_indent(self):
self.assertEqual(adjust_indent("", 3), "")
self.assertEqual(adjust_indent("foo", 3), " foo")
self.assertEqual(adjust_indent(" foo", 3), " foo")
def test_only_changed_indentation(self):
assert(only_changed_indentation(["foo"], ["foo"]))
assert(only_changed_indentation(["foo"], [" foo"]))
assert(not only_changed_indentation(["foo"], ["oo"]))
assert(not only_changed_indentation(["foo"], ["foo", "bar"]))
assert(not only_changed_indentation(["foo", "bar"], ["foo"]))
assert(not only_changed_indentation([" foo"], [" oo"]))
def fix_lines_test_case(self, expected, input, lines_changed):
actual_lines_changed = fix_lines(input)
self.assertEqual(expected, input)
self.assertEqual(lines_changed, actual_lines_changed)
def test_fix_lines(self):
self.fix_lines_test_case( \
expected = [' """', ' if something {', ' foo();', ' }', ' """'], \
input = [' """', ' if something {', ' foo();', ' }', '"""'], \
lines_changed = [5] \
)
self.fix_lines_test_case( \
expected = [' foo = """', ' asdf', ' """'], \
input = [' foo = """', ' asdf', ' """'], \
lines_changed = [2, 3] \
)
self.fix_lines_test_case( \
expected = [' foo = """', ' // asdf', ' //"""'], \
input = [' foo = """', ' // asdf', ' //"""'], \
lines_changed = [] \
)
self.fix_lines_test_case( \
expected = [' """', ' asdf {', ' asdf', ' }', ' """'], \
input = [' """', ' asdf {', ' asdf', ' }', '"""'], \
lines_changed = [2, 3, 4, 5] \
)
self.fix_lines_test_case( \
expected = [' """', '', ' foo', ' bar', ' """'], \
input = [' """', '', ' foo', ' bar', ' """'], \
lines_changed = [] \
)
def main():
# Run unit tests if given `--self-test` argument
if len(sys.argv) > 1 and sys.argv[1] == "--self-test":
sys.argv.pop()
unittest.main()
else:
file_names = sys.argv[1:]
status = 0
for file_name in file_names:
if fix_file(file_name):
status = 1
sys.exit(status)
if __name__ == "__main__":
main()
================================================
FILE: .pre-commit-hooks/ktlint.sh
================================================
#!/bin/bash
#
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
#
set -e
cd "$(git rev-parse --show-toplevel)"
# `-q`: run gradle in quiet mode
# `--console plain`: Turn off the fancy terminal printing in gradle
# `2>/dev/null`: Suppress the build success/failure output at the end since pre-commit will report failures
./gradlew -q --console plain ktlintPreCommit -DktlintPreCommitArgs="$*" 2>/dev/null
================================================
FILE: .pre-commit-hooks/runtime-versioner.sh
================================================
#!/bin/bash
#
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
#
set -e
cd "$(git rev-parse --show-toplevel)/tools/ci-build/runtime-versioner" && cargo run -- audit
================================================
FILE: .pre-commit-hooks/sdk-lints.sh
================================================
#!/bin/bash
#
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
#
set -e
cd "$(git rev-parse --show-toplevel)/tools/ci-build/sdk-lints" && cargo run -- check --all
================================================
FILE: AGENTS.md
================================================
# Smithy-rs AI Agent Guide
## Package Layout
- **`codegen-core/`** - Shared codegen
- **`codegen-server/`** - Server codegen
- **`codegen-client/`** - Client codegen
- **`rust-runtime/`** - Runtime libraries
- **`codegen-server-test/`** - Server integration tests
Protocol files: `codegen-{core,server}/.../protocols/`
## Protocol Tests
Protocol tests validate that generated code correctly implements Smithy protocols (like restJson1, awsJson1_1, etc.).
### Adding Protocol Tests
Protocol tests are defined in Smithy model files using `@httpRequestTests` and `@httpResponseTests` traits:
```
@http(uri: "/my-operation", method: "GET")
@httpRequestTests([
{
id: "MyOperationRequest",
documentation: "Test description",
protocol: "aws.protocols#restJson1",
method: "GET",
uri: "/my-operation",
queryParams: ["param1=value1", "param2=value2"],
params: {
queryMap: {
"param1": "value1",
"param2": "value2"
}
},
appliesTo: "client",
}
])
operation MyOperation {
input: MyOperationInput,
}
```
### Key Protocol Test Locations
- **`codegen-core/common-test-models/rest-json-extras.smithy`** - restJson1 protocol tests
- **`codegen-core/common-test-models/constraints.smithy`** - Constraint validation tests with restJson1
- **`codegen-client-test/model/main.smithy`** - awsJson1_1 protocol tests
### httpQueryParams Bug Investigation
When investigating the `@httpQueryParams` bug (where query parameters weren't appearing in requests), the issue was in `RequestBindingGenerator.kt` line 173. The bug occurred when:
1. An operation had ONLY `@httpQueryParams` (no regular `@httpQuery` parameters)
2. The condition `if (dynamicParams.isEmpty() && literalParams.isEmpty() && mapParams.isEmpty())` would skip generating the `uri_query` function
The fix was to ensure `mapParams.isEmpty()` was included in the condition check. The current implementation correctly generates query parameters for `@httpQueryParams` even when no other query parameters exist.
**Testing httpQueryParams**: Create operations with only `@httpQueryParams` to ensure they generate proper query strings in requests.
## rustTemplate Formatting
**CRITICAL**: Because `#` is the formatting character in `rustTemplate`, Rust attributes must be escaped:
❌ Wrong: `#[derive(Debug)]`
✅ Correct: `##[derive(Debug)]`
This applies to ALL Rust attributes: `##[non_exhaustive]`, `##[derive(...)]`, `##[cfg(...)]`, etc.
## preludeScope: Rust Prelude Types
**Always use `preludeScope` for Rust prelude types:**
```kotlin
rustTemplate(
"let result: #{Result}<#{String}, #{Error}> = #{Ok}(value);",
*preludeScope, // Provides Result, String, Ok
"Error" to myErrorType
)
```
❌ Wrong: `"let result: Result<String, Error> = Ok(value);"`
✅ Correct: Use `*preludeScope` in templates
## RuntimeType and Dependencies
`RuntimeType` objects contain:
- **`path`**: Rust path (e.g., `"::mime::Mime"`)
- **`dependency`**: `CargoDependency` or `InlineDependency`
Using a `RuntimeType` automatically adds its dependency to `Cargo.toml`.
### Creating RuntimeTypes
```kotlin
// Pre-defined dependencies
val Mime = CargoDependency.Mime.toType()
val Bytes = CargoDependency.Bytes.toType().resolve("Bytes")
// Runtime crates
val smithyTypes = RuntimeType.smithyTypes(runtimeConfig)
```
### Always Use Symbols
❌ Wrong: `rust("const MIME: ::mime::Mime = ::mime::APPLICATION_JSON;")`
✅ Correct: `rustTemplate("const MIME: #{Mime}::Mime = #{Mime}::APPLICATION_JSON;", "Mime" to RuntimeType.Mime)`
### String Interpolation in Templates
**For RuntimeTypes and complex objects**: Use `#{name}` syntax. NOTE: you do not need to use `#{name:W}`. This is now
the default. You may see old code with this pattern.
**For simple strings**: Use `$` with `.dq()` for double-quoted strings
```kotlin
// ❌ Wrong - causes "Invalid type provided to RustSymbolFormatter"
rustTemplate("let content_type = \"#{content_type}\";", "content_type" to "application/json")
// ✅ Correct - use $ interpolation for strings
rustTemplate("let content_type = ${contentType.dq()};")
```
## RuntimeType.forInlineFun: Lazy Generation
Code is only generated if used. `forInlineFun` enables lazy generation:
```kotlin
val mimeType = RuntimeType.forInlineFun("APPLICATION_JSON", module) {
rustTemplate(
"pub const APPLICATION_JSON: #{Mime}::Mime = #{Mime}::APPLICATION_JSON;",
"Mime" to RuntimeType.Mime
)
}
```
⚠️ **Footgun**: Name collisions mean only one implementation gets generated.
## GitHub CLI Integration
**View issues and PRs:**
```bash
gh issue view <number> --repo smithy-lang/smithy-rs
gh pr view <number> --repo smithy-lang/smithy-rs
gh pr diff <number> --repo smithy-lang/smithy-rs
```
**Debug CI failures:**
```bash
# Get PR status and identify failed checks
gh pr view <PR_NUMBER> --repo smithy-lang/smithy-rs --json statusCheckRollup | \
jq '.statusCheckRollup[] | select(.conclusion == "FAILURE") | {name: .name, url: .detailsUrl}'
# Get run ID from PR
gh pr view <PR_NUMBER> --repo smithy-lang/smithy-rs --json statusCheckRollup | \
jq -r '.statusCheckRollup[0].detailsUrl' | grep -oP 'runs/\K[0-9]+'
# List failed jobs in a run
gh api repos/smithy-lang/smithy-rs/actions/runs/<RUN_ID>/jobs | \
jq '.jobs[] | select(.conclusion == "failure") | {name: .name, id: .id}'
# Get logs for a specific failed job
gh api repos/smithy-lang/smithy-rs/actions/jobs/<JOB_ID>/logs | grep -B 5 -A 10 "error:"
# Search logs for specific patterns
gh api repos/smithy-lang/smithy-rs/actions/jobs/<JOB_ID>/logs | grep -i "lint\|doctest\|aborting"
```
**Add comments (use single quotes for complex markdown):**
```bash
gh issue comment <number> --repo smithy-lang/smithy-rs --body 'markdown content with `backticks` and special chars'
```
**Comment Guidelines:**
- Always ask for confirmation before posting comments
- Always start comments with `*Comment from Claude*` in italics
**Run PR Bot and Canary workflows:**
```bash
# Get PR info first
gh pr view <PR_NUMBER> --repo smithy-lang/smithy-rs --json headRefOid,number
# Run PR Bot (generates codegen diff and doc preview)
gh workflow run "Invoke PR Bot as Maintainer" --repo smithy-lang/smithy-rs \
-f pull_number=<PR_NUMBER> -f commit_sha=<HEAD_SHA>
# Run Canary (tests SDK generation and integration)
gh workflow run "Invoke Canary as Maintainer" --repo smithy-lang/smithy-rs \
-f pull_request_number=<PR_NUMBER> -f commit_sha=<HEAD_SHA>
```
## Investigation Patterns
**Before implementing changes:**
1. **Research existing work** - Check related PRs/issues first
2. **Build and examine generated code** - `./gradlew codegen-server-test:assemble --quiet`
3. **Generated code location** - `codegen-server-test/build/smithyprojections/codegen-server-test/`
4. **Key generated files** - `src/protocol_serde/shape_*.rs`, `src/event_stream_serde.rs`
5. **Look for patterns** - Client vs server codegen often mirrors each other
6. **Identify minimal change** - Understand current behavior before modifying codegen
**Single Protocol Development:**
- When working on a single protocol, uncomment the filter line in `codegen-server-test/build.gradle.kts:111`
- This speeds up builds by only generating code for the protocol you're working on
**Client/Server Symmetry:**
Client changes often show the pattern for server-side implementation
**Configuration Debugging:**
- `codegen` settings are defined in `CoreCodegenConfig`, `ServerCodegenConfig`, or `ClientCodegenConfig` (in respective `*RustSettings.kt` files)
- `customizationConfig` settings: search for `settings.customizationConfig` usages - classify as client/server based on whether a `ClientCodegenDecorator` or `ServerCodegenDecorator` uses it
- In smithy-build[-template].json, use `"codegen"` not `"codegenConfig"` (the latter is only a Kotlin property name)
- When settings aren't working, check the generated smithy-build.json structure first
- Settings placement matters - wrong nesting means settings are ignored silently
- Always verify actual generated configuration matches expectations
**Testing Configuration Settings:**
- Create separate services with different settings to test configuration behavior
- Use integration tests that verify actual generated code behavior, not just compilation
- Test both enabled and disabled states to ensure the setting actually controls behavior
## Testing
### Integration Tests
Test actual generated code, not just codegen logic:
```kotlin
serverIntegrationTest(model) { codegenContext, rustCrate ->
rustCrate.testModule {
tokioTest("test_accept_header") {
rustTemplate(
"""
let request = ::http::Request::builder()
.header("Accept", "application/cbor")
.body(Body::empty()).unwrap();
let result = MyInput::from_request(request).await;
result.expect("should accept valid header");
"""
)
}
}
}
```
### Running Tests
**Codegen tests:**
```bash
./gradlew test --tests "*MyTest*"
./gradlew codegen-server-test:assemble --quiet
```
**Debug failing tests:**
```bash
# Remove --quiet to see failure details
./gradlew :codegen-core:test --tests "*InlineDependencyTest*"
# Extract just the error from HTML report (avoid HTML markup pollution)
grep -A 5 "AssertionError\|Exception" codegen-core/build/reports/tests/test/classes/software.amazon.smithy.rust.codegen.core.rustlang.InlineDependencyTest.html
```
**Runtime tests:**
```bash
cd rust-runtime && cargo test --quiet -p aws-smithy-types
```
**Protocol tests:**
```bash
./gradlew codegen-client-test:assemble --quiet
cd codegen-client-test/build/smithyprojections/codegen-client-test/rest_xml_extras/rust-client-codegen
cargo test --quiet
```
**Note: Always use `--quiet` with cargo commands to reduce noise and focus on actual errors.**
## Viewing Generated Code
Generated code appears in:
```
codegen-server-test/build/smithyprojections/codegen-server-test/SERVICE_NAME/rust-server-codegen/
```
Enable debug comments:
```kotlin
serverIntegrationTest(
model, IntegrationTestParams(
additionalSettings = ServerAdditionalSettings.builder()
.generateCodegenComments() // Adds Kotlin source line comments
.toObjectNode()
)
) { /* test code */ }
```
================================================
FILE: CHANGELOG.md
================================================
<!-- Do not manually edit this file. Use the `changelogger` tool. -->
April 16th, 2026
================
**Breaking Changes:**
- :bug::warning: (client) Now files written by the SDK (like credential caches) are created with file
permissions `0o600` on unix systems. This could break customers who were relying
on the visibility of those files to other users on the system.
**New this release:**
- :tada: (client, [smithy-rs#4521](https://github.com/smithy-lang/smithy-rs/issues/4521)) Add `sigv4a_signing_region_set` client configuration. Supports programmatic, environment variable (`AWS_SIGV4A_SIGNING_REGION_SET`), and shared config file (`sigv4a_signing_region_set`) configuration. User-provided values now take priority over endpoint-resolved values.
- :bug: (client, [smithy-rs#4340](https://github.com/smithy-lang/smithy-rs/issues/4340), @ysaito) Prevent memory leak in identity cache when overriding credentials via `config_override`. Each `config_override` that sets a credentials provider now uses an operation-scoped identity cache instead of the shared client-level cache, preventing unbounded partition growth. Additionally, the client-level identity cache now enforces a configurable `max_partitions` cap (default: 64) as a safety net.
- :bug: (client, [smithy-rs#4596](https://github.com/smithy-lang/smithy-rs/issues/4596), [aws-sdk-rust#1423](https://github.com/awslabs/aws-sdk-rust/issues/1423), @annahay4) Fix `TokenBucket::is_full()` and `TokenBucket::is_empty()` to convert fractional tokens into whole permits before checking availability. Previously, accumulated fractional tokens from success rewards were not accounted for, causing these methods to return incorrect results.
- :bug: (client, [smithy-rs#4587](https://github.com/smithy-lang/smithy-rs/issues/4587)) Upgrade `sha2` from 0.10.x to 0.11.x. The previous version defaulted to software-based compression instead of hardware-accelerated compression, resulting in lower throughput. The new version automatically detects and uses hardware-accelerated instructions when available.
- (client, [smithy-rs#4591](https://github.com/smithy-lang/smithy-rs/issues/4591)) Optimize `Encoder::str()` and `Encoder::blob()` by collapsing multiple `write_all` calls into a single buffer operation. This bypasses minicbor's generic writer to write the CBOR type+length header and payload directly into the underlying `Vec<u8>`, improving performance on serialization-heavy hot paths.
- :bug: (all, [smithy-rs#4572](https://github.com/smithy-lang/smithy-rs/issues/4572), @jlizen) Re-export `EventStreamSender` from generated SDK crates when the service uses event streams, so users do not need a direct dependency on `aws-smithy-http` to construct event stream responses.
- :bug: (client, [smithy-rs#4599](https://github.com/smithy-lang/smithy-rs/issues/4599)) Fix waiter codegen failure when JMESPath `&&` or `||` expressions have non-boolean operands (e.g., a list field used as a truthiness check). Non-boolean types are now coerced to booleans using JMESPath truthiness rules: arrays and strings check `!is_empty()`, all other non-null types are truthy.
- :bug: (client, [smithy-rs#4431](https://github.com/smithy-lang/smithy-rs/issues/4431), @jlizen) Add missing `EventOrInitial`, `EventOrInitialMarshaller`, and `EventStreamSender::into_inner` to `aws-smithy-legacy-http` event_stream module, fixing compilation failures in generated SDKs that reference these types.
**Contributors**
Thank you for your contributions! ❤
- @annahay4 ([aws-sdk-rust#1423](https://github.com/awslabs/aws-sdk-rust/issues/1423), [smithy-rs#4596](https://github.com/smithy-lang/smithy-rs/issues/4596))
- @jlizen ([smithy-rs#4431](https://github.com/smithy-lang/smithy-rs/issues/4431), [smithy-rs#4572](https://github.com/smithy-lang/smithy-rs/issues/4572))
- @ysaito ([smithy-rs#4340](https://github.com/smithy-lang/smithy-rs/issues/4340))
March 16th, 2026
================
**New this release:**
- :bug: (client) Fix null value handling in dense collections: SDK now correctly rejects null values in non-sparse collections instead of silently dropping them.
March 2nd, 2026
===============
**New this release:**
- :bug: (client, [smithy-rs#4429](https://github.com/smithy-lang/smithy-rs/issues/4429)) Fix bug where initial-request messages in event stream operations are not signed.
February 16th, 2026
===================
**New this release:**
- :tada: (server, [smithy-rs#4494](https://github.com/smithy-lang/smithy-rs/issues/4494)) Automatically add `smithy.framework#ValidationException` to operations with constrained inputs. Previously, users had to either set `addValidationExceptionToConstrainedOperations: true` in codegen settings or manually add `ValidationException` to each operation. Now this happens automatically unless a custom validation exception (a structure with the `@validationException` trait) is defined in the model. When using a custom validation exception, users must explicitly add it to each applicable operation. The `addValidationExceptionToConstrainedOperations` flag is deprecated.
February 10th, 2026
===================
**Breaking Changes:**
- :warning: (all) Upgrade MSRV to Rust 1.91.0.
February 1st, 2026
==================
**Breaking Changes:**
- :warning::tada: (client, [smithy-rs#4454](https://github.com/smithy-lang/smithy-rs/issues/4454), [smithy-rs#4467](https://github.com/smithy-lang/smithy-rs/issues/4467), [aws-sdk-rust#1389](https://github.com/awslabs/aws-sdk-rust/issues/1389)) Enable retries by default for AWS SDK clients using `BehaviorVersion::v2026_01_12()` or later.
Previously, retries were only enabled when constructing clients via `aws_config::load_from_env()`. Clients constructed directly using `Client::from_conf()` did not have retries enabled, which was inconsistent with AWS SDK behavior in other languages.
This change affects AWS SDK clients constructed with `Client::from_conf()` when using `BehaviorVersion::v2026_01_12()` or `BehaviorVersion::latest()`. Generic Smithy clients (non-AWS) are not affected.
To disable retries:
```rust
let config = aws_sdk_s3::Config::builder()
.retry_config(RetryConfig::disabled())
// ...
.build();
```
For more context, see the [discussion on retry behavior](https://github.com/smithy-lang/smithy-rs/discussions/4466).
**New this release:**
- :tada: (client, [smithy-rs#312](https://github.com/smithy-lang/smithy-rs/issues/312), @AmitKulkarni23) Add support for Smithy bigInteger and bigDecimal types as string wrappers in aws-smithy-types, allowing users to parse with their preferred big number library.
- :tada: (all, [smithy-rs#4484](https://github.com/smithy-lang/smithy-rs/issues/4484)) All Smithy-rs crates, for both servers and clients, now use the 1.x version of
the `http` crate for all internal processing. Utility methods are still provided
for users to convert between SDK types and both of the `http` 0.x and 1.x types.
- :bug: (client, [smithy-rs#4500](https://github.com/smithy-lang/smithy-rs/issues/4500)) Fix JMESPath integer literal handling in waiters to support Smithy 1.66.0, which parses integer literals as `Long` instead of `Double`.
**Contributors**
Thank you for your contributions! ❤
- @AmitKulkarni23 ([smithy-rs#312](https://github.com/smithy-lang/smithy-rs/issues/312))
January 14th, 2026
==================
**New this release:**
- (client) Add support for tracking observability business metrics (OBSERVABILITY_TRACING, OBSERVABILITY_OTEL_TRACING, OBSERVABILITY_OTEL_METRICS) in User-Agent headers when telemetry providers are configured.
- :bug: (client, [smithy-rs#4459](https://github.com/smithy-lang/smithy-rs/issues/4459), @lnj) Updated the `TokenBucket` creation to initialize the bucket with the user-provided `TimeSource` from the `Config`.
This fixes the bug in [issue 4459](https://github.com/smithy-lang/smithy-rs/issues/4459) that caused failures
in WASM since the TokenBucket was being created with a default `SystemTime` based `TimeSource`
- :bug: (client, @svix-jbrown) Update the `lru` dependency for `aws-sdk-s3` and `rust-runtime`
- (client, [smithy-rs#4469](https://github.com/smithy-lang/smithy-rs/issues/4469), @greenwoodcm) Add support for `aws-smithy-mocks` interceptor to handle concurrent requests.
- :bug: (client, [smithy-rs#4413](https://github.com/smithy-lang/smithy-rs/issues/4413)) Deprecate [NoAuthRuntimePlugin](https://docs.rs/aws-smithy-runtime/1.9.4/aws_smithy_runtime/client/auth/no_auth/struct.NoAuthRuntimePlugin.html), which does not properly configure the auth scheme option resolver for noAuth, and introduce `NoAuthRuntimePluginV2` that does.
- (client) Update crc-fast to 1.9
**Contributors**
Thank you for your contributions! ❤
- @greenwoodcm ([smithy-rs#4469](https://github.com/smithy-lang/smithy-rs/issues/4469))
- @lnj ([smithy-rs#4459](https://github.com/smithy-lang/smithy-rs/issues/4459))
- @svix-jbrown
December 16th, 2025
===================
**New this release:**
- :tada: (all, [smithy-rs#4418](https://github.com/smithy-lang/smithy-rs/issues/4418), @AmitKulkarni23) Add `expect_number_as_string_or_null` function to `aws-smithy-json` that extracts JSON numbers as strings without converting to u64/i64/f64. This preserves arbitrary precision for BigInteger and BigDecimal support, preventing precision loss for numbers larger than standard numeric types can represent.
- :tada: (client, @annahay) Add token bucket success rewards, time based refill, fractional tokens
**Contributors**
Thank you for your contributions! ❤
- @AmitKulkarni23 ([smithy-rs#4418](https://github.com/smithy-lang/smithy-rs/issues/4418))
- @annahay
December 8th, 2025
==================
**Breaking Changes:**
- :bug::warning: (server, [smithy-rs#4400](https://github.com/smithy-lang/smithy-rs/issues/4400), [smithy-rs#4397](https://github.com/smithy-lang/smithy-rs/issues/4397)) Fix issue where SigV4 envelopes for EventStreams did not support the initial message. This is _technically_ a breaking change but should not break consumers in practice since the
resulting type has the same methods.
**New this release:**
- :tada: (client, @annahay) Added methods in token bucket to indicate if bucket is full or empty
- :bug: (client, [smithy-rs#4427](https://github.com/smithy-lang/smithy-rs/issues/4427)) Fix Content-Type and Accept headers for event streams in RPC v2 CBOR to set `application/vnd.amazon.eventstream`
- :bug: (client, [aws-sdk-rust#1390](https://github.com/awslabs/aws-sdk-rust/issues/1390), @arielb1) In `legacy-rustls-ring`, polyfill `with_native_roots` to use `rustls_native_certs 0.8` to avoid
RUSTSEC-2025-0134.
- :bug: (all, @arielby) Publish an MSRV for all packages
**Contributors**
Thank you for your contributions! ❤
- @annahay
- @arielb1 ([aws-sdk-rust#1390](https://github.com/awslabs/aws-sdk-rust/issues/1390))
- @arielby
November 20th, 2025
===================
**New this release:**
- (client, [smithy-rs#4388](https://github.com/smithy-lang/smithy-rs/issues/4388), @greenwoodcm) Add `then_compute_response` to Smithy mock
**Contributors**
Thank you for your contributions! ❤
- @greenwoodcm ([smithy-rs#4388](https://github.com/smithy-lang/smithy-rs/issues/4388))
November 6th, 2025
==================
**New this release:**
- (client) Bump crc-fast version to 1.6.0
- (client) Validate `Region` is a valid host label when constructing endpoints.
October 30th, 2025
==================
**Breaking Changes:**
- :warning::tada: (server, [smithy-rs#4356](https://github.com/smithy-lang/smithy-rs/issues/4356)) Parse EventStream signed-frames for servers marked with `@sigv4`.
This is a breaking change, because events from SigV4 services are wrapped in a SignedEvent frame.
- :warning: (all, [smithy-rs#4367](https://github.com/smithy-lang/smithy-rs/issues/4367)) Upgrade MSRV to Rust 1.88.0.
**New this release:**
- :bug::tada: (server, [smithy-rs#4352](https://github.com/smithy-lang/smithy-rs/issues/4352), [smithy-rs#4345](https://github.com/smithy-lang/smithy-rs/issues/4345)) Update smithy-rs servers to support sending `initial-response` events over event streams.
Prior to this change, event streams that had initial responses were unsupported. This change also adds a new codegen setting, `alwaysSendEventStreamInitialResponse`.
When this setting is set to `true`, the generated server will unconditionally send `initial-response` objects, even when empty. This is required for compatibility with smithy-java as well as a few other clients.
This setting defaults to false currently because smithy-rs based clients do not currently support this behavior.
```json
"codegen": {
"alwaysSendEventStreamInitialResponse": true // default false
}
```
- :tada: (all, @arielby) Include the protocol name in `package.metadata.smithy.protocol` in `Cargo.toml`
to allow easily figuring out which protocol was used to generate a crate.
- :bug::tada: (client, [smithy-rs#4349](https://github.com/smithy-lang/smithy-rs/issues/4349), @arielby) Make Hyper idle pool timeout configurable, and fix the bug where pool timeouts
would not work if the client was built directly.
- :tada: (server, [smithy-rs#4317](https://github.com/smithy-lang/smithy-rs/issues/4317), @jasgin) Adds validators and codegen support for the custom traits custom traits `@validationException`, `@validationMessage`,
`@validationFieldList`, `@validationFieldName`, and `@validationFieldMessage` for defining a custom validation exception
to use instead of `smithy.framework#ValidationException`.
- :bug: (client, [smithy-rs#4346](https://github.com/smithy-lang/smithy-rs/issues/4346)) Fix bug where httpQueryParams were silently dropped when no other query parameters were modeled.
- :bug: (server, [smithy-rs#4344](https://github.com/smithy-lang/smithy-rs/issues/4344), [smithy-rs#4325](https://github.com/smithy-lang/smithy-rs/issues/4325)) Fix bug where servers did not attempt to parse an `initial-request`. `initial-requests` may be sent by clients both when they would contain valid data
and when they are empty.
- :bug: (client, [smithy-rs#4352](https://github.com/smithy-lang/smithy-rs/issues/4352), [smithy-rs#4353](https://github.com/smithy-lang/smithy-rs/issues/4353)) Update clients to allow `initial-response` events to be accepted on event streams, even when know modeled initial response exists.
This is required for spec compliance, backwards compatibility, and compatibility with non-smithy-rs based servers that
MAY unconditionally send `initial-response` messages.
- :bug: (client, [smithy-rs#4265](https://github.com/smithy-lang/smithy-rs/issues/4265), [smithy-rs#4189](https://github.com/smithy-lang/smithy-rs/issues/4189)) Adds new `with_test_defaults_v2()` for all clients supporting region configuration which applies `us-east-1` as default region if not set by user. This allows `aws-smithy-mocks` to work for non AWS SDK generated clients. Also clarify `test-util` feature requirement when using `aws-smithy-mocks`.
**Contributors**
Thank you for your contributions! ❤
- @arielby ([smithy-rs#4349](https://github.com/smithy-lang/smithy-rs/issues/4349))
- @jasgin ([smithy-rs#4317](https://github.com/smithy-lang/smithy-rs/issues/4317))
October 6th, 2025
=================
**New this release:**
- :tada: (server, [smithy-rs#4321](https://github.com/smithy-lang/smithy-rs/issues/4321), @jasgin) Adds the custom traits `@validationException`, `@validationMessage`, `@validationFieldList`, `@validationFieldName`, and `@validationFieldMessage`
for defining custom validation exceptions.
**Contributors**
Thank you for your contributions! ❤
- @jasgin ([smithy-rs#4321](https://github.com/smithy-lang/smithy-rs/issues/4321))
October 2nd, 2025
=================
**New this release:**
- :bug: (server) Fix bug where servers rejected `application/vnd.amazon.evenstream` ACCEPT header for RPCv2Cbor
This change allows this header while also allowing `application/cbor` for backwards compatibility.
October 1st, 2025
=================
**New this release:**
- :tada: (client, [smithy-rs#4299](https://github.com/smithy-lang/smithy-rs/issues/4299), @greenwoodcm) Added a new `then_compute_output` to `aws-smithy-mocks` rule builder that allows using the input type when computing a mocked response, e.g.
```rs
// Return a computed output based on the input
let compute_rule = mock!(Client::get_object)
.then_compute_output(|req| {
let key = req.key().unwrap_or("unknown");
GetObjectOutput::builder()
.body(ByteStream::from_static(format!("content for {}", key).as_bytes()))
.build()
});
```
- :bug: (client, [smithy-rs#4226](https://github.com/smithy-lang/smithy-rs/issues/4226), @haydenbaker) Fixed problematic assertion on HttpApiKeyAuthTrait `scheme`, which was causing client-codegen to fail when the correct settings for api-key based auth were set.
**Contributors**
Thank you for your contributions! ❤
- @greenwoodcm ([smithy-rs#4299](https://github.com/smithy-lang/smithy-rs/issues/4299))
- @haydenbaker ([smithy-rs#4226](https://github.com/smithy-lang/smithy-rs/issues/4226))
September 10th, 2025
====================
**New this release:**
- :bug: (client, [smithy-rs#4274](https://github.com/smithy-lang/smithy-rs/issues/4274)) The `HickoryDnsResolver` and `TokioDnsResolver` were not `Clone` making it impossible to use them in the http_client builder's `build_with_resolver` method.
August 28th, 2025
=================
**New this release:**
- :tada: (client, [smithy-rs#4274](https://github.com/smithy-lang/smithy-rs/issues/4274)) Add a new crate, `aws-smithy-dns` that contains a `HickoryDnsResolver`. This wraps a `hickory_resolver::Resolver` and provides some minimal configuration options (timeouts, retries, etc.) Instructions for overriding the DNS resolver on your HTTP client can be found in our documentation at https://docs.aws.amazon.com/sdk-for-rust/latest/dg/http.html#overrideDns
- :bug: (client, [smithy-rs#4282](https://github.com/smithy-lang/smithy-rs/issues/4282)) Set the `pool_timer` for the default Hyper client. This is required to allow the `pool_idle_timeout` to work. Now idle connections will be released by the pool after 90 seconds.
- (client, [smithy-rs#4263](https://github.com/smithy-lang/smithy-rs/issues/4263)) Make [`TokenBucket`](https://docs.rs/aws-smithy-runtime/latest/aws_smithy_runtime/client/retries/struct.TokenBucket.html) and [`ClientRateLimiter`](https://docs.rs/aws-smithy-runtime/latest/aws_smithy_runtime/client/retries/struct.ClientRateLimiter.html) configurable through [`RetryPartition`](https://docs.rs/aws-smithy-runtime/latest/aws_smithy_runtime/client/retries/struct.RetryPartition.html).
August 18th, 2025
=================
**New this release:**
- :tada: (client, [aws-sdk-rust#169](https://github.com/awslabs/aws-sdk-rust/issues/169)) Add support for proxy environment variables (`HTTP_PROXY, `HTTPS_PROXY`, `ALL_PROXY`, `NO_PROXY`). Service clients will now automatically respect these proxy environment variables on the latest `BehaviorVersion`. Older behavior versions do not automatically detect these environment variables and will require manually building a `aws_smithy_http_client::Connector` with a proxy config explicitly set to use this feature.
- :tada: (client, @WillChilds-Klein) Enable rustls post-quantum by default.
- (client) fix `aws-smithy-eventstream` feature `derive-arbitrary` on `arbitrary` >= 1.4.2
**Contributors**
Thank you for your contributions! ❤
- @WillChilds-Klein
August 13th, 2025
=================
**New this release:**
- :bug: (client) pin crc-fast to <1.4 to workaround SIGILL
August 11th, 2025
=================
**New this release:**
- :tada: (client, [smithy-rs#4208](https://github.com/smithy-lang/smithy-rs/issues/4208)) Add the ability to insert `hints.mostly-unused = true` in Cargo.toml. Enable this hint for the below crates:
- aws-sdk-cloudformation
- aws-sdk-dynamodb
- aws-sdk-ec2
- aws-sdk-s3
- aws-sdk-sns
- aws-sdk-sqs
- aws-sdk-ssm
- aws-sdk-sts
See more information about this hint at https://blog.rust-lang.org/inside-rust/2025/07/15/call-for-testing-hint-mostly-unused/
- :tada: (client, [smithy-rs#4208](https://github.com/smithy-lang/smithy-rs/issues/4208), @joshtriplett) Enable `hints.mostly-unused = true` for `aws-sdk-lambda` (taking a release
build from 57s to 40s) and `aws-sdk-rds` (taking a release build from 1m34s to
49s).
**Contributors**
Thank you for your contributions! ❤
- @joshtriplett ([smithy-rs#4208](https://github.com/smithy-lang/smithy-rs/issues/4208))
August 4th, 2025
================
**New this release:**
- :tada: (all, @Dorenavant) Add EnumSection to allow decorators to modify enum member attributes
- :bug: (client, [smithy-rs#4227](https://github.com/smithy-lang/smithy-rs/issues/4227)) Fix canonical request sort order
**Contributors**
Thank you for your contributions! ❤
- @Dorenavant
July 25th, 2025
===============
**New this release:**
- :bug: (client, [smithy-rs#4232](https://github.com/smithy-lang/smithy-rs/issues/4232)) Add fallback equality on no auth `AuthSchemeId` for backward compatibility, treating `AuthSchemeId::from("no_auth")` (legacy) and `AuthSchemeId::from("noAuth")` (updated) as equivalent.
July 23rd, 2025
===============
July 21st, 2025
===============
**New this release:**
- :tada: (client, [smithy-rs#4203](https://github.com/smithy-lang/smithy-rs/issues/4203)) Add support for configuring auth schemes manually using an auth scheme preference list.
The preference list allows customers to reprioritize the order of auth schemes originally
determined by the auth scheme resolver.
Customers can configure the auth scheme preference at the following locations, listed in order of precedence:
1. Service Client Configuration
```rust
use aws_runtime::auth::sigv4;
use aws_smithy_runtime_api::client::auth::AuthSchemeId;
use aws_smithy_runtime_api::client::auth::http::HTTP_BEARER_AUTH_SCHEME_ID;
let config = aws_sdk_s3::Config::builder()
.auth_scheme_preference([AuthSchemeId::from("scheme1"), sigv4::SCHEME_ID, HTTP_BEARER_AUTH_SCHEME_ID])
// ...
.build();
```
2. Environment Variable
```
AWS_AUTH_SCHEME_PREFERENCE=scheme1, sigv4, httpBearerAuth
```
3. Configuration File
```
auth_scheme_preference=scheme1, sigv4, httpBearerAuth
```
With this configuration, the auth scheme resolver will prefer to select them in the specified order,
if they are supported.
July 17th, 2025
===============
**New this release:**
- (all, [smithy-rs#4212](https://github.com/smithy-lang/smithy-rs/issues/4212)) Event streams now allocate a right-sized buffer avoiding repeated reallocations during serialization
July 16th, 2025
===============
**New this release:**
- (client) re-use checksums on retry attempts for enhanced durability
July 8th, 2025
==============
**New this release:**
- (client, [smithy-rs#4076](https://github.com/smithy-lang/smithy-rs/issues/4076), [smithy-rs#4198](https://github.com/smithy-lang/smithy-rs/issues/4198)) Allows customers to configure the auth schemes and auth scheme resolver. For more information see the GitHub [discussion](https://github.com/smithy-lang/smithy-rs/discussions/4197).
June 30th, 2025
===============
June 27th, 2025
===============
**New this release:**
- :bug: (client) Fix hyper 1.x connection refused errors not marked as retryable
- (client, [smithy-rs#4186](https://github.com/smithy-lang/smithy-rs/issues/4186)) Make Rpc V2 CBOR a compatible protocol for `awsQuery` using `awsQueryCompatible` trait
June 11th, 2025
===============
**Breaking Changes:**
- :bug::warning: (server) Fixed SmithyRpcV2CBOR Router to properly respect case in service names, preventing routing failures for services with mixed-case service shape ID.
**New this release:**
- :bug: (client, [smithy-rs#4165](https://github.com/smithy-lang/smithy-rs/issues/4165)) Fix default supported protocols incorrectly ordered in `ClientProtocolLoader`.
June 3rd, 2025
==============
**New this release:**
- :bug: (client, [aws-sdk-rust#1272](https://github.com/awslabs/aws-sdk-rust/issues/1272)) Fix h2 GoAway errors not being retried by hyper legacy client
May 19th, 2025
==============
**New this release:**
- :tada: (client, [smithy-rs#4135](https://github.com/smithy-lang/smithy-rs/issues/4135)) Introduce a new `repeatedly()` function to `aws-smithy-mocks` sequence builder to build mock rules that behave as an
infinite sequence.
```rust
let rule = mock!(aws_sdk_s3::Client::get_object)
.sequence()
.http_status(503, None)
.times(2) // repeat the last output twice before moving onto the next response in the sequence
.output(|| GetObjectOutput::builder()
.body(ByteStream::from_static(b"success"))
.build()
)
.repeatedly() // repeat the last output forever
.build();
```
- :bug: (client, [aws-sdk-rust#1291](https://github.com/awslabs/aws-sdk-rust/issues/1291)) Removing the `optimize_crc32_auto` feature flag from the `crc-fast` dependency of the `aws-smithy-checksums` crate since it was causing build issues for some customers.
- :bug: (client, [smithy-rs#4137](https://github.com/smithy-lang/smithy-rs/issues/4137)) Fix bug with enum codegen
When the first enum generated has the `@sensitive` trait the opaque type
underlying the `UnknownVariant` inherits that sensitivity. This means that
it does not derive `Debug`. Since the module is only generated once this
causes a problem for non-sensitive enums that rely on the type deriving
`Debug` so that they can also derive `Debug`. We manually add `Debug` to
the module so it will always be there since the `UnknownVariant` is not
modeled and cannot be `@sensitive`.
- :bug: (client, [smithy-rs#4135](https://github.com/smithy-lang/smithy-rs/issues/4135)) fix simple rules behavior with `RuleMode::MatchAny`
May 15th, 2025
==============
**New this release:**
- :bug: (all, [smithy-rs#4132](https://github.com/smithy-lang/smithy-rs/issues/4132)) Smithy unions that contain members named "unknown" will now codegen correctly
- (all, [smithy-rs#4105](https://github.com/smithy-lang/smithy-rs/issues/4105), @FalkWoldmann) Replace once_cell with std equivalents
**Contributors**
Thank you for your contributions! ❤
- @FalkWoldmann ([smithy-rs#4105](https://github.com/smithy-lang/smithy-rs/issues/4105))
May 9th, 2025
=============
**Breaking Changes:**
- :warning: (all, [smithy-rs#4120](https://github.com/smithy-lang/smithy-rs/issues/4120)) Update MSRV to 1.82.0
**New this release:**
- :bug::tada: (client, [smithy-rs#4074](https://github.com/smithy-lang/smithy-rs/issues/4074), [smithy-rs#3926](https://github.com/smithy-lang/smithy-rs/issues/3926)) Promote `aws-smithy-mocks-experimental` to `aws-smithy-mocks`. This crate is now a recommended tool for testing
generated SDK clients. This release includes several fixes as well as a new sequence builder API that can be
used to test more complex scenarios such as retries.
```rust
use aws_sdk_s3::operation::get_object::GetObjectOutput;
use aws_sdk_s3::config::retry::RetryConfig;
use aws_smithy_types::byte_stream::ByteStream;
use aws_smithy_mocks::{mock, mock_client, RuleMode};
#[tokio::test]
async fn test_retry_behavior() {
// Create a rule that returns 503 twice, then succeeds
let retry_rule = mock!(aws_sdk_s3::Client::get_object)
.sequence()
.http_status(503, None)
.times(2) // Return 503 HTTP status twice
.output(|| GetObjectOutput::builder() // Finally return a successful output
.body(ByteStream::from_static(b"success"))
.build())
.build();
// Create a mocked client with the rule
let s3 = mock_client!(
aws_sdk_s3,
RuleMode::Sequential,
[&retry_rule],
|client_builder| {
client_builder.retry_config(RetryConfig::standard().with_max_attempts(3))
}
);
// This should succeed after two retries
let result = s3
.get_object()
.bucket("test-bucket")
.key("test-key")
.send()
.await
.expect("success after retries");
// Verify the response
let data = result.body.collect().await.expect("successful read").to_vec();
assert_eq!(data, b"success");
// Verify all responses were used
assert_eq!(retry_rule.num_calls(), 3);
}
```
- :bug: (all, [smithy-rs#4117](https://github.com/smithy-lang/smithy-rs/issues/4117)) Fix a bug where fields that were initially annotated with the `required` trait and later updated to use the `addedDefault` trait were not serialized when their values matched the default, even when the values were explicitly set. With this fix, fields with `addedDefault` are now always serialized.
May 2nd, 2025
=============
April 23rd, 2025
================
**Breaking Changes:**
- :warning: (client, [smithy-rs#3776](https://github.com/smithy-lang/smithy-rs/issues/3776)) [AuthSchemeId](https://docs.rs/aws-smithy-runtime-api/1.7.4/aws_smithy_runtime_api/client/auth/struct.AuthSchemeId.html) no longer implements the `Copy` trait. This type has primarily been used by the Smithy code generator, so this change is not expected to affect users of SDKs.
**New this release:**
- (all, [smithy-rs#4050](https://github.com/smithy-lang/smithy-rs/issues/4050), @FalkWoldmann) Replace the `once_cell` crate with the `std` counterpart in Smithy runtime crates.
- (client) remove redundant span attributes and improve log output format
**Contributors**
Thank you for your contributions! ❤
- @FalkWoldmann ([smithy-rs#4050](https://github.com/smithy-lang/smithy-rs/issues/4050))
March 27th, 2025
================
March 25th, 2025
================
**New this release:**
- :bug: (client, [smithy-rs#4054](https://github.com/smithy-lang/smithy-rs/issues/4054)) Fix traversal of operations bound to resources in several places including logic to determine if an event stream exists
- (client, [smithy-rs#4052](https://github.com/smithy-lang/smithy-rs/issues/4052)) Update spans to better align with spec.
March 10th, 2025
================
**New this release:**
- (client, [aws-sdk-rust#977](https://github.com/awslabs/aws-sdk-rust/issues/977), [smithy-rs#1925](https://github.com/smithy-lang/smithy-rs/issues/1925), [smithy-rs#3710](https://github.com/smithy-lang/smithy-rs/issues/3710)) Updates the default HTTP client to be based on the 1.x version of hyper and updates the default TLS provider to [rustls](https://github.com/rustls/rustls) with [aws-lc](https://github.com/aws/aws-lc-rs). For more information see the GitHub [discussion](https://github.com/awslabs/aws-sdk-rust/discussions/1257).
March 4th, 2025
===============
**New this release:**
- :tada: (client, [smithy-rs#121](https://github.com/smithy-lang/smithy-rs/issues/121)) Adds support for event stream operations with non-REST protocols such as RPC v2 CBOR.
February 20th, 2025
===================
**New this release:**
- :bug: (server) Fixed code generation failure that occurred when using `Result` as a shape name in Smithy models with constrained members by properly handling naming conflicts with Rust's built-in Result type
- :bug: (server) Previously, models would fail to generate when both the list and at least one of its members was directly constrained with documentation comments
February 12th, 2025
===================
February 3rd, 2025
==================
January 28th, 2025
==================
January 23rd, 2025
==================
January 17th, 2025
==================
January 14th, 2025
==================
**New this release:**
- :bug::tada: (client, [smithy-rs#3845](https://github.com/smithy-lang/smithy-rs/issues/3845)) S3 client behavior is updated to always calculate a checksum by default for operations that support it (such as PutObject or UploadPart), or require it (such as DeleteObjects). The default checksum algorithm is CRC32. Checksum behavior can be configured using `when_supported` and `when_required` options - in shared config using request_checksum_calculation, or as env variable using AWS_REQUEST_CHECKSUM_CALCULATION.
The S3 client attempts to validate response checksums for all S3 API operations that support checksums. However, if the SDK has not implemented the specified checksum algorithm then this validation is skipped. Checksum validation behavior can be configured using `when_supported` and `when_required` options - in shared config using response_checksum_validation, or as env variable using AWS_RESPONSE_CHECKSUM_VALIDATION.
- :bug::tada: (client, [smithy-rs#3967](https://github.com/smithy-lang/smithy-rs/issues/3967)) Updates client generation to conform with Smithy's updates to the [httpChecksum trait](https://smithy.io/2.0/aws/aws-core.html#aws-protocols-httpchecksum-trait).
- :bug: (client, [aws-sdk-rust#1234](https://github.com/awslabs/aws-sdk-rust/issues/1234)) Fix token bucket not being set for standard and adaptive retry modes
December 30th, 2024
===================
December 26th, 2024
===================
**New this release:**
- :bug: (server, [smithy-rs#3890](https://github.com/smithy-lang/smithy-rs/issues/3890)) Fix bug in `serde` decorator that generated non-compiling code on some models
December 16th, 2024
===================
December 3rd, 2024
==================
**Breaking Changes:**
- :bug::warning: (server, [smithy-rs#3880](https://github.com/smithy-lang/smithy-rs/issues/3880)) Unnamed enums now validate assigned values and will raise a `ConstraintViolation` if an unknown variant is set.
The following is an example of an unnamed enum:
```smithy
@enum([
{ value: "MONDAY" },
{ value: "TUESDAY" }
])
string UnnamedDayOfWeek
```
November 5th, 2024
==================
October 30th, 2024
==================
October 24th, 2024
==================
October 9th, 2024
=================
**New this release:**
- :bug: (client, [smithy-rs#3871](https://github.com/smithy-lang/smithy-rs/issues/3871), [aws-sdk-rust#1202](https://github.com/awslabs/aws-sdk-rust/issues/1202)) Fix minimum throughput detection for downloads to avoid incorrectly raising an error while the user is consuming data at a slow but steady pace.
October 5th, 2024
=================
**New this release:**
- :bug: (client, [smithy-rs#3852](https://github.com/smithy-lang/smithy-rs/issues/3852)) Fix AWS SDK generation examples in README in the `aws/sdk` directory.
October 4th, 2024
=================
October 3rd, 2024
=================
**Breaking Changes:**
- :warning: (server) The generated crates no longer have the `aws-lambda` feature flag enabled by default. This prevents the [aws-lambda](https://docs.rs/crate/aws-smithy-http-server/0.63.3/features#aws-lambda) feature from being automatically enabled in [aws-smithy-http-server](https://docs.rs/aws-smithy-http-server/0.63.3/aws_smithy_http_server/) when the SDK is not intended for AWS Lambda.
**New this release:**
- :tada: (server) All relevant types from [aws-smithy-http-server](https://docs.rs/aws-smithy-http-server/0.63.3/aws_smithy_http_server/) are now re-exported within the generated crates. This removes the need to explicitly depend on [aws-smithy-http-server](https://docs.rs/aws-smithy-http-server/0.63.3/aws_smithy_http_server/) in service handler code and prevents compilation errors caused by version mismatches.
- :tada: (all, [smithy-rs#3573](https://github.com/smithy-lang/smithy-rs/issues/3573)) Support for the [rpcv2Cbor](https://smithy.io/2.0/additional-specs/protocols/smithy-rpc-v2.html) protocol has been added, allowing service
Showing preview only (251K chars total). Download the full file or copy to clipboard to get everything.
gitextract_ciwtcwjx/
├── .cargo/
│ └── config.toml
├── .cargo-deny-config.toml
├── .changelog/
│ └── .example
├── .editorconfig
├── .git-blame-ignore-revs
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── blank_issue.md
│ │ └── config.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── actions/
│ │ ├── docker-build/
│ │ │ └── action.yml
│ │ ├── download-all-artifacts/
│ │ │ └── action.yml
│ │ └── free-disk-space/
│ │ └── action.yml
│ ├── scripts/
│ │ ├── README.md
│ │ ├── acquire-build-image
│ │ ├── docker-image-hash
│ │ ├── get-or-create-release-branch.sh
│ │ └── upload-build-image.sh
│ └── workflows/
│ ├── backport-pull-request.yml
│ ├── ci-main.yml
│ ├── ci-pr-forks.yml
│ ├── ci-pr.yml
│ ├── ci-tls.yml
│ ├── ci.yml
│ ├── claim-crate-names.yml
│ ├── credentials-verification.yml
│ ├── dry-run-release-scheduled.yml
│ ├── dry-run-release.yml
│ ├── github-pages.yml
│ ├── manual-canary.yml
│ ├── manual-pull-request-bot.yml
│ ├── manual-update-lockfiles.yml
│ ├── prod-release.yml
│ ├── pull-request-bot.yml
│ ├── pull-request-updating-lockfiles.yml
│ ├── release-scripts/
│ │ └── create-release.js
│ ├── release.yml
│ ├── update-lockfiles.yml
│ └── update-sdk-next.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .pre-commit-hooks/
│ ├── kotlin-block-quotes.py
│ ├── ktlint.sh
│ ├── runtime-versioner.sh
│ └── sdk-lints.sh
├── AGENTS.md
├── CHANGELOG.md
├── CODEOWNERS
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── NOTICE
├── README.md
├── aws/
│ ├── SDK_CHANGELOG.next.json
│ ├── SDK_README.md.hb
│ ├── codegen-aws-sdk/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── main/
│ │ │ ├── kotlin/
│ │ │ │ └── software/
│ │ │ │ └── amazon/
│ │ │ │ └── smithy/
│ │ │ │ └── rustsdk/
│ │ │ │ ├── AccountIdEndpointParamsDecorator.kt
│ │ │ │ ├── AwsCargoDependency.kt
│ │ │ │ ├── AwsChunkedContentEncodingDecorator.kt
│ │ │ │ ├── AwsCodegenDecorator.kt
│ │ │ │ ├── AwsCrateDocsDecorator.kt
│ │ │ │ ├── AwsDocs.kt
│ │ │ │ ├── AwsFluentClientDecorator.kt
│ │ │ │ ├── AwsPresigningDecorator.kt
│ │ │ │ ├── AwsRequestIdDecorator.kt
│ │ │ │ ├── AwsRuntimeType.kt
│ │ │ │ ├── BaseRequestIdDecorator.kt
│ │ │ │ ├── CrateLicenseDecorator.kt
│ │ │ │ ├── CredentialProvidersDecorator.kt
│ │ │ │ ├── DisablePayloadSigningDecorator.kt
│ │ │ │ ├── EndpointBasedAuthSchemeDecorator.kt
│ │ │ │ ├── EndpointBuiltInsDecorator.kt
│ │ │ │ ├── EndpointOverrideMetricDecorator.kt
│ │ │ │ ├── HttpRequestChecksumDecorator.kt
│ │ │ │ ├── HttpRequestCompressionDecorator.kt
│ │ │ │ ├── HttpResponseChecksumDecorator.kt
│ │ │ │ ├── InlineAwsDependency.kt
│ │ │ │ ├── IntegrationTestDependencies.kt
│ │ │ │ ├── InvocationIdDecorator.kt
│ │ │ │ ├── ObservabilityMetricDecorator.kt
│ │ │ │ ├── RecursionDetectionDecorator.kt
│ │ │ │ ├── RegionDecorator.kt
│ │ │ │ ├── RetryClassifierDecorator.kt
│ │ │ │ ├── RetryInformationHeaderDecorator.kt
│ │ │ │ ├── SdkConfigDecorator.kt
│ │ │ │ ├── SdkSettings.kt
│ │ │ │ ├── ServiceConfigDecorator.kt
│ │ │ │ ├── ServiceEnvConfigDecorator.kt
│ │ │ │ ├── SigV4AuthDecorator.kt
│ │ │ │ ├── SmokeTestsDecorator.kt
│ │ │ │ ├── SpanDecorator.kt
│ │ │ │ ├── TokenProvidersDecorator.kt
│ │ │ │ ├── UserAgentDecorator.kt
│ │ │ │ ├── customize/
│ │ │ │ │ ├── AwsDisableStalledStreamProtection.kt
│ │ │ │ │ ├── DisabledAuthDecorator.kt
│ │ │ │ │ ├── EnvironmentTokenProviderDecorator.kt
│ │ │ │ │ ├── IsTruncatedPaginatorDecorator.kt
│ │ │ │ │ ├── RemoveDefaults.kt
│ │ │ │ │ ├── RemoveDefaultsDecorator.kt
│ │ │ │ │ ├── ServiceSpecificDecorator.kt
│ │ │ │ │ ├── Sigv4aAuthTraitBackfillDecorator.kt
│ │ │ │ │ ├── apigateway/
│ │ │ │ │ │ └── ApiGatewayDecorator.kt
│ │ │ │ │ ├── dsql/
│ │ │ │ │ │ └── DsqlDecorator.kt
│ │ │ │ │ ├── ec2/
│ │ │ │ │ │ ├── BoxPrimitiveShapes.kt
│ │ │ │ │ │ ├── EC2MakePrimitivesOptional.kt
│ │ │ │ │ │ └── Ec2Decorator.kt
│ │ │ │ │ ├── glacier/
│ │ │ │ │ │ └── GlacierDecorator.kt
│ │ │ │ │ ├── rds/
│ │ │ │ │ │ └── RdsDecorator.kt
│ │ │ │ │ ├── route53/
│ │ │ │ │ │ ├── Route53Decorator.kt
│ │ │ │ │ │ └── TrimResourceId.kt
│ │ │ │ │ ├── s3/
│ │ │ │ │ │ ├── MakeS3BoolsAndNumbersOptional.kt
│ │ │ │ │ │ ├── S3Decorator.kt
│ │ │ │ │ │ ├── S3ExpiresDecorator.kt
│ │ │ │ │ │ ├── S3ExpressDecorator.kt
│ │ │ │ │ │ ├── S3ExtendedRequestIdDecorator.kt
│ │ │ │ │ │ └── StripBucketFromPath.kt
│ │ │ │ │ ├── s3control/
│ │ │ │ │ │ └── S3ControlDecorator.kt
│ │ │ │ │ ├── sso/
│ │ │ │ │ │ └── SSODecorator.kt
│ │ │ │ │ ├── sts/
│ │ │ │ │ │ └── STSDecorator.kt
│ │ │ │ │ └── timestream/
│ │ │ │ │ └── TimestreamDecorator.kt
│ │ │ │ ├── endpoints/
│ │ │ │ │ ├── AwsEndpointsStdLib.kt
│ │ │ │ │ ├── OperationInputTestGenerator.kt
│ │ │ │ │ ├── RequireEndpointRules.kt
│ │ │ │ │ └── StripEndpointTrait.kt
│ │ │ │ └── traits/
│ │ │ │ └── PresignableTrait.kt
│ │ │ └── resources/
│ │ │ ├── LICENSE
│ │ │ ├── META-INF/
│ │ │ │ └── services/
│ │ │ │ └── software.amazon.smithy.rust.codegen.client.smithy.customize.ClientCodegenDecorator
│ │ │ └── default-partitions.json
│ │ └── test/
│ │ └── kotlin/
│ │ ├── AwsCrateDocsDecoratorTest.kt
│ │ ├── SdkCodegenIntegrationTest.kt
│ │ └── software/
│ │ └── amazon/
│ │ └── smithy/
│ │ └── rustsdk/
│ │ ├── AwsPresigningDecoratorTest.kt
│ │ ├── CredentialProviderConfigTest.kt
│ │ ├── EndpointBuiltInsDecoratorTest.kt
│ │ ├── EndpointOverrideMetricDecoratorTest.kt
│ │ ├── EndpointsCredentialsTest.kt
│ │ ├── HttpChecksumTest.kt
│ │ ├── HttpRequestCompressionDecoratorTest.kt
│ │ ├── InvocationIdDecoratorTest.kt
│ │ ├── OperationInputTestGeneratorTests.kt
│ │ ├── RegionDecoratorTest.kt
│ │ ├── RegionProviderConfigTest.kt
│ │ ├── RetryPartitionTest.kt
│ │ ├── SigV4AuthDecoratorTest.kt
│ │ ├── SmokeTestsDecoratorTest.kt
│ │ ├── TestUtil.kt
│ │ ├── TimeoutConfigMergingTest.kt
│ │ ├── TokenProvidersDecoratorTest.kt
│ │ ├── UserAgentDecoratorTest.kt
│ │ └── customize/
│ │ ├── IsTruncatedPaginatorTest.kt
│ │ ├── RemoveDefaultsTest.kt
│ │ ├── ec2/
│ │ │ └── EC2MakePrimitivesOptionalTest.kt
│ │ └── s3/
│ │ └── S3ExpiresDecoratorTest.kt
│ ├── rust-runtime/
│ │ ├── .gitignore
│ │ ├── Cargo.toml
│ │ ├── aws-config/
│ │ │ ├── Cargo.toml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── clippy.toml
│ │ │ ├── examples/
│ │ │ │ └── imds.rs
│ │ │ ├── external-types.toml
│ │ │ ├── fuzz/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── fuzz_targets/
│ │ │ │ └── profile-parser.rs
│ │ │ ├── integration-tests/
│ │ │ │ └── eks-credentials/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .npmignore
│ │ │ │ ├── README.md
│ │ │ │ ├── bin/
│ │ │ │ │ └── eks-credentials.ts
│ │ │ │ ├── cdk.json
│ │ │ │ ├── jest.config.js
│ │ │ │ ├── lib/
│ │ │ │ │ └── eks-credentials-stack.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── test.rs
│ │ │ │ └── tsconfig.json
│ │ │ ├── src/
│ │ │ │ ├── credential_process.rs
│ │ │ │ ├── default_provider/
│ │ │ │ │ ├── account_id_endpoint_mode.rs
│ │ │ │ │ ├── app_name.rs
│ │ │ │ │ ├── auth_scheme_preference.rs
│ │ │ │ │ ├── checksums.rs
│ │ │ │ │ ├── credentials.rs
│ │ │ │ │ ├── disable_request_compression.rs
│ │ │ │ │ ├── endpoint_url.rs
│ │ │ │ │ ├── ignore_configured_endpoint_urls.rs
│ │ │ │ │ ├── region.rs
│ │ │ │ │ ├── request_min_compression_size_bytes.rs
│ │ │ │ │ ├── retry_config.rs
│ │ │ │ │ ├── sigv4a_signing_region_set.rs
│ │ │ │ │ ├── timeout_config.rs
│ │ │ │ │ ├── token.rs
│ │ │ │ │ ├── use_dual_stack.rs
│ │ │ │ │ └── use_fips.rs
│ │ │ │ ├── default_provider.rs
│ │ │ │ ├── ecs.rs
│ │ │ │ ├── env_service_config.rs
│ │ │ │ ├── environment/
│ │ │ │ │ ├── credentials.rs
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ └── region.rs
│ │ │ │ ├── http_credential_provider.rs
│ │ │ │ ├── imds/
│ │ │ │ │ ├── client/
│ │ │ │ │ │ ├── error.rs
│ │ │ │ │ │ └── token.rs
│ │ │ │ │ ├── client.rs
│ │ │ │ │ ├── credentials.rs
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ └── region.rs
│ │ │ │ ├── json_credentials.rs
│ │ │ │ ├── lib.rs
│ │ │ │ ├── login/
│ │ │ │ │ ├── cache.rs
│ │ │ │ │ ├── dpop.rs
│ │ │ │ │ └── token.rs
│ │ │ │ ├── login.rs
│ │ │ │ ├── meta/
│ │ │ │ │ ├── credentials/
│ │ │ │ │ │ ├── chain.rs
│ │ │ │ │ │ └── mod.rs
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ ├── region.rs
│ │ │ │ │ └── token.rs
│ │ │ │ ├── profile/
│ │ │ │ │ ├── credentials/
│ │ │ │ │ │ ├── exec.rs
│ │ │ │ │ │ └── repr.rs
│ │ │ │ │ ├── credentials.rs
│ │ │ │ │ ├── location_of_profile_files.md
│ │ │ │ │ ├── parser.rs
│ │ │ │ │ ├── profile_file.rs
│ │ │ │ │ ├── region.rs
│ │ │ │ │ └── token.rs
│ │ │ │ ├── profile.rs
│ │ │ │ ├── provider_config.rs
│ │ │ │ ├── retry.rs
│ │ │ │ ├── sensitive_command.rs
│ │ │ │ ├── sso/
│ │ │ │ │ ├── cache.rs
│ │ │ │ │ ├── credentials.rs
│ │ │ │ │ └── token.rs
│ │ │ │ ├── sso.rs
│ │ │ │ ├── stalled_stream_protection.rs
│ │ │ │ ├── sts/
│ │ │ │ │ ├── assume_role.rs
│ │ │ │ │ └── util.rs
│ │ │ │ ├── sts.rs
│ │ │ │ ├── test_case.rs
│ │ │ │ ├── timeout.rs
│ │ │ │ └── web_identity_token.rs
│ │ │ └── test-data/
│ │ │ ├── assume-role-tests.json
│ │ │ ├── default-credential-provider-chain/
│ │ │ │ ├── e2e_fips_and_dual_stack_sso/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── sso/
│ │ │ │ │ │ └── cache/
│ │ │ │ │ │ └── dace00cba5f8355ec9d274ceb2bcebdfbeed0e12.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── ecs_assume_role/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── ecs_credentials/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── ecs_credentials_invalid_profile/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── eks_pod_identity_credentials/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── token.jwt
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── eks_pod_identity_no_token_file/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── environment_variables/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── environment_variables_blank/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── imds_assume_role/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── imds_config_with_no_creds/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── imds_default_chain_error/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── imds_default_chain_retries/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── imds_default_chain_success/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── imds_disabled/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── imds_no_iam_role/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── imds_token_fail/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── prefer_environment/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── credentials
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── profile_name/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── profile_overrides_web_identity/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ ├── home/
│ │ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ │ └── config
│ │ │ │ │ │ └── token.jwt
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── profile_static_keys/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── credentials
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── profile_static_keys_case_insensitive/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── credentials
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── sso_assume_role/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── sso/
│ │ │ │ │ │ └── cache/
│ │ │ │ │ │ └── dace00cba5f8355ec9d274ceb2bcebdfbeed0e12.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── sso_no_token_file/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── sso/
│ │ │ │ │ │ └── cache/
│ │ │ │ │ │ └── differenthashthatdoesntmatch.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── sso_server_error/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── sso/
│ │ │ │ │ │ └── cache/
│ │ │ │ │ │ └── dace00cba5f8355ec9d274ceb2bcebdfbeed0e12.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── web_identity_source_profile_no_env/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ ├── home/
│ │ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ │ └── config
│ │ │ │ │ │ └── token.jwt
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── web_identity_token_env/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── token.jwt
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── web_identity_token_invalid_jwt/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ ├── home/
│ │ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ │ └── config
│ │ │ │ │ │ └── token.jwt
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── web_identity_token_profile/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ ├── home/
│ │ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ │ └── config
│ │ │ │ │ │ └── token.jwt
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ └── web_identity_token_source_profile/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ ├── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ └── config
│ │ │ │ │ └── token.jwt
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── default-token-provider-chain/
│ │ │ │ ├── profile_keys/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── sso/
│ │ │ │ │ │ └── cache/
│ │ │ │ │ │ └── d12208e38164f558a1d06c99432ab77dbb346c45.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ ├── profile_keys_case_insensitive/
│ │ │ │ │ ├── env.json
│ │ │ │ │ ├── fs/
│ │ │ │ │ │ └── home/
│ │ │ │ │ │ └── .aws/
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ └── sso/
│ │ │ │ │ │ └── cache/
│ │ │ │ │ │ └── d12208e38164f558a1d06c99432ab77dbb346c45.json
│ │ │ │ │ ├── http-traffic.json
│ │ │ │ │ └── test-case.json
│ │ │ │ └── profile_name/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── sso/
│ │ │ │ │ └── cache/
│ │ │ │ │ └── 29faa2f70ab0f58f60e284d585d95865572f5cbd.json
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── ecs-tests.json
│ │ │ ├── imds-config/
│ │ │ │ └── imds-endpoint-tests.json
│ │ │ ├── login-provider-test-cases.json
│ │ │ └── profile-provider/
│ │ │ ├── assume_role_override_global_env_url/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── assume_role_override_global_profile_url/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── assume_role_override_service_env_url/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── assume_role_override_service_profile_url/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── credential_process/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── credential_process_account_id_fallback/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── credential_process_failure/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── credential_process_invalid/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── e2e_assume_role/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── e2e_fips_and_dual_stack_sts/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── empty_config/
│ │ │ │ ├── env.json
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── invalid_config/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ └── config
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── invalid_sso_credentials_config/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ └── config
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── region_override/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── retry_on_error/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ └── credentials
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── sso_credentials/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ ├── credentials
│ │ │ │ │ └── sso/
│ │ │ │ │ └── cache/
│ │ │ │ │ └── 34c6fceca75e456f25e7e99531e2425c6c1de443.json
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── sso_override_global_env_url/
│ │ │ │ ├── env.json
│ │ │ │ ├── fs/
│ │ │ │ │ └── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ ├── credentials
│ │ │ │ │ └── sso/
│ │ │ │ │ └── cache/
│ │ │ │ │ └── 34c6fceca75e456f25e7e99531e2425c6c1de443.json
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ └── sso_token/
│ │ │ ├── env.json
│ │ │ ├── fs/
│ │ │ │ ├── env.json
│ │ │ │ ├── home/
│ │ │ │ │ └── .aws/
│ │ │ │ │ ├── config
│ │ │ │ │ ├── credentials
│ │ │ │ │ └── sso/
│ │ │ │ │ └── cache/
│ │ │ │ │ └── 34c6fceca75e456f25e7e99531e2425c6c1de443.json
│ │ │ │ ├── http-traffic.json
│ │ │ │ └── test-case.json
│ │ │ ├── http-traffic.json
│ │ │ └── test-case.json
│ │ ├── aws-credential-types/
│ │ │ ├── Cargo.toml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── additional-ci
│ │ │ ├── external-types.toml
│ │ │ └── src/
│ │ │ ├── attributes.rs
│ │ │ ├── credential_feature.rs
│ │ │ ├── credential_fn.rs
│ │ │ ├── credentials_impl.rs
│ │ │ ├── lib.rs
│ │ │ ├── provider/
│ │ │ │ ├── credentials.rs
│ │ │ │ ├── error.rs
│ │ │ │ ├── future.rs
│ │ │ │ └── token.rs
│ │ │ ├── provider.rs
│ │ │ └── token_fn.rs
│ │ ├── aws-inlineable/
│ │ │ ├── Cargo.toml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── external-types.toml
│ │ │ └── src/
│ │ │ ├── account_id_endpoint.rs
│ │ │ ├── apigateway_interceptors.rs
│ │ │ ├── aws_chunked.rs
│ │ │ ├── dsql_auth_token.rs
│ │ │ ├── endpoint_auth.rs
│ │ │ ├── endpoint_discovery.rs
│ │ │ ├── glacier_interceptors.rs
│ │ │ ├── http_request_checksum.rs
│ │ │ ├── http_response_checksum.rs
│ │ │ ├── lib.rs
│ │ │ ├── observability_feature.rs
│ │ │ ├── presigning.rs
│ │ │ ├── presigning_interceptors.rs
│ │ │ ├── rds_auth_token.rs
│ │ │ ├── route53_resource_id_preprocessor.rs
│ │ │ ├── s3_expires_interceptor.rs
│ │ │ ├── s3_express.rs
│ │ │ ├── s3_request_id.rs
│ │ │ └── serialization_settings.rs
│ │ ├── aws-runtime/
│ │ │ ├── Cargo.toml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── additional-ci
│ │ │ ├── external-types.toml
│ │ │ ├── src/
│ │ │ │ ├── auth/
│ │ │ │ │ ├── sigv4.rs
│ │ │ │ │ └── sigv4a.rs
│ │ │ │ ├── auth.rs
│ │ │ │ ├── content_encoding/
│ │ │ │ │ ├── body/
│ │ │ │ │ │ ├── http_body_0_x.rs
│ │ │ │ │ │ └── http_body_1_x.rs
│ │ │ │ │ ├── body.rs
│ │ │ │ │ ├── options.rs
│ │ │ │ │ └── sign.rs
│ │ │ │ ├── content_encoding.rs
│ │ │ │ ├── env_config/
│ │ │ │ │ ├── error.rs
│ │ │ │ │ ├── file.rs
│ │ │ │ │ ├── normalize.rs
│ │ │ │ │ ├── parse.rs
│ │ │ │ │ ├── property.rs
│ │ │ │ │ ├── section.rs
│ │ │ │ │ └── source.rs
│ │ │ │ ├── env_config.rs
│ │ │ │ ├── fs_util.rs
│ │ │ │ ├── invocation_id.rs
│ │ │ │ ├── lib.rs
│ │ │ │ ├── recursion_detection.rs
│ │ │ │ ├── request_info.rs
│ │ │ │ ├── retries/
│ │ │ │ │ └── classifiers.rs
│ │ │ │ ├── retries.rs
│ │ │ │ ├── sdk_feature.rs
│ │ │ │ ├── service_clock_skew.rs
│ │ │ │ ├── user_agent/
│ │ │ │ │ ├── interceptor.rs
│ │ │ │ │ ├── metrics.rs
│ │ │ │ │ ├── test_data/
│ │ │ │ │ │ └── feature_id_to_metric_value.json
│ │ │ │ │ └── test_util.rs
│ │ │ │ └── user_agent.rs
│ │ │ └── test-data/
│ │ │ ├── file-location-tests.json
│ │ │ ├── profile-parser-tests.json
│ │ │ └── recursion-detection.json
│ │ ├── aws-runtime-api/
│ │ │ ├── Cargo.toml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── external-types.toml
│ │ │ └── src/
│ │ │ └── lib.rs
│ │ ├── aws-sigv4/
│ │ │ ├── Cargo.toml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── aws-signing-test-suite/
│ │ │ │ ├── README.md
│ │ │ │ ├── v4/
│ │ │ │ │ ├── double-encode-path/
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── double-url-encode/
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-header-key-duplicate/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-header-value-multiline/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-header-value-order/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-header-value-trim/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-relative-normalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-relative-relative-normalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-relative-relative-unnormalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-relative-unnormalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-slash-dot-slash-normalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-slash-dot-slash-unnormalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-slash-normalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-slash-pointless-dot-normalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-slash-pointless-dot-unnormalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-slash-unnormalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-slashes-normalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-slashes-unnormalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-space-normalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-space-unnormalized/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-unreserved/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-utf8/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-vanilla/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-vanilla-empty-query-key/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-vanilla-query/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-vanilla-query-order-encoded/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-vanilla-query-order-key-case/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-vanilla-query-unreserved/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-vanilla-utf8-query/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── get-vanilla-with-session-token/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-header-key-case/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-header-key-sort/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-header-value-case/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-sts-header-after/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-sts-header-before/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-vanilla/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-vanilla-empty-query-value/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-vanilla-query/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ ├── post-x-www-form-urlencoded/
│ │ │ │ │ │ ├── context.json
│ │ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ │ └── request.txt
│ │ │ │ │ └── post-x-www-form-urlencoded-parameters/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ └── v4a/
│ │ │ │ ├── get-header-key-duplicate/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-header-value-multiline/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-header-value-order/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-header-value-trim/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-relative-normalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-relative-relative-normalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-relative-relative-unnormalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-relative-unnormalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-slash-dot-slash-normalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-slash-dot-slash-unnormalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-slash-normalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-slash-pointless-dot-normalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-slash-pointless-dot-unnormalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-slash-unnormalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-slashes-normalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-slashes-unnormalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-space-normalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-space-unnormalized/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-unreserved/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-utf8/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-vanilla/
│ │ │ │ │ ├── canonical-request.txt
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ ├── request.txt
│ │ │ │ │ └── string-to-sign.txt
│ │ │ │ ├── get-vanilla-empty-query-key/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-vanilla-query/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-vanilla-query-order-encoded/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-vanilla-query-order-key-case/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-vanilla-query-unreserved/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-vanilla-utf8-query/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── get-vanilla-with-session-token/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-header-key-case/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-header-key-sort/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-header-value-case/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-sts-header-after/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-sts-header-before/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-vanilla/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-vanilla-empty-query-value/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-vanilla-query/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ ├── post-x-www-form-urlencoded/
│ │ │ │ │ ├── context.json
│ │ │ │ │ ├── header-canonical-request.txt
│ │ │ │ │ ├── header-signature.txt
│ │ │ │ │ ├── header-signed-request.txt
│ │ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ │ ├── public-key.json
│ │ │ │ │ ├── query-canonical-request.txt
│ │ │ │ │ ├── query-signature.txt
│ │ │ │ │ ├── query-signed-request.txt
│ │ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ │ └── request.txt
│ │ │ │ └── post-x-www-form-urlencoded-parameters/
│ │ │ │ ├── context.json
│ │ │ │ ├── header-canonical-request.txt
│ │ │ │ ├── header-signature.txt
│ │ │ │ ├── header-signed-request.txt
│ │ │ │ ├── header-string-to-sign.txt
│ │ │ │ ├── public-key.json
│ │ │ │ ├── query-canonical-request.txt
│ │ │ │ ├── query-signature.txt
│ │ │ │ ├── query-signed-request.txt
│ │ │ │ ├── query-string-to-sign.txt
│ │ │ │ └── request.txt
│ │ │ ├── benches/
│ │ │ │ ├── hmac.rs
│ │ │ │ └── sigv4a.rs
│ │ │ ├── external-types.toml
│ │ │ └── src/
│ │ │ ├── date_time.rs
│ │ │ ├── event_stream.rs
│ │ │ ├── http_request/
│ │ │ │ ├── canonical_request/
│ │ │ │ │ └── sigv4a.rs
│ │ │ │ ├── canonical_request.rs
│ │ │ │ ├── error.rs
│ │ │ │ ├── settings.rs
│ │ │ │ ├── sign.rs
│ │ │ │ ├── test.rs
│ │ │ │ ├── uri_path_normalization.rs
│ │ │ │ └── url_escape.rs
│ │ │ ├── http_request.rs
│ │ │ ├── lib.rs
│ │ │ ├── sign/
│ │ │ │ ├── v4.rs
│ │ │ │ └── v4a.rs
│ │ │ └── sign.rs
│ │ ├── aws-types/
│ │ │ ├── Cargo.toml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── additional-ci
│ │ │ ├── build.rs
│ │ │ ├── external-types.toml
│ │ │ └── src/
│ │ │ ├── app_name.rs
│ │ │ ├── build_metadata.rs
│ │ │ ├── endpoint_config.rs
│ │ │ ├── lib.rs
│ │ │ ├── origin.rs
│ │ │ ├── os_shim_internal.rs
│ │ │ ├── region.rs
│ │ │ ├── request_id.rs
│ │ │ ├── sdk_config.rs
│ │ │ └── service_config.rs
│ │ ├── build.gradle.kts
│ │ └── clippy.toml
│ ├── sdk/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── aws-models/
│ │ │ ├── README.md
│ │ │ ├── bedrock-runtime.json
│ │ │ ├── cloudwatch-logs.json
│ │ │ ├── codecatalyst.json
│ │ │ ├── config-service.json
│ │ │ ├── dynamodb.json
│ │ │ ├── ec2.json
│ │ │ ├── ecs.json
│ │ │ ├── glacier.json
│ │ │ ├── iam.json
│ │ │ ├── kms.json
│ │ │ ├── lambda.json
│ │ │ ├── polly.json
│ │ │ ├── route-53.json
│ │ │ ├── s3-control.json
│ │ │ ├── s3.json
│ │ │ ├── sdk-default-configuration.json
│ │ │ ├── sdk-endpoints.json
│ │ │ ├── sdk-partitions.json
│ │ │ ├── signin.json
│ │ │ ├── sso-oidc.json
│ │ │ ├── sso.json
│ │ │ ├── sts.json
│ │ │ ├── timestream-query.json
│ │ │ ├── timestream-write.json
│ │ │ └── transcribe-streaming.json
│ │ ├── aws-models-extra/
│ │ │ ├── README.md
│ │ │ ├── batch-tests.smithy
│ │ │ ├── ebs-tests.smithy
│ │ │ ├── glacier-tests.smithy
│ │ │ ├── route53-tests.smithy
│ │ │ ├── s3-tests.smithy
│ │ │ └── sqs-tests.smithy
│ │ ├── benchmarks/
│ │ │ ├── previous-release-comparison/
│ │ │ │ ├── Cargo.toml
│ │ │ │ ├── README.md
│ │ │ │ └── benches/
│ │ │ │ └── previous_release_comparison.rs
│ │ │ ├── s3-express/
│ │ │ │ ├── Cargo.toml
│ │ │ │ ├── README.md
│ │ │ │ ├── benches/
│ │ │ │ │ ├── concurrent_put_get.rs
│ │ │ │ │ ├── get_object.rs
│ │ │ │ │ ├── put_get_delete.rs
│ │ │ │ │ └── put_object.rs
│ │ │ │ └── src/
│ │ │ │ └── lib.rs
│ │ │ ├── s3-throughput/
│ │ │ │ ├── README.md
│ │ │ │ ├── benchmark/
│ │ │ │ │ ├── Cargo.toml
│ │ │ │ │ └── src/
│ │ │ │ │ ├── get_test.rs
│ │ │ │ │ ├── latencies.rs
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── multipart_get.rs
│ │ │ │ │ ├── multipart_put.rs
│ │ │ │ │ ├── put_test.rs
│ │ │ │ │ └── verify.rs
│ │ │ │ └── infrastructure/
│ │ │ │ ├── .eslintrc.json
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .npmignore
│ │ │ │ ├── .prettierrc
│ │ │ │ ├── assets/
│ │ │ │ │ ├── init_instance.sh
│ │ │ │ │ └── run_benchmark.sh
│ │ │ │ ├── bin/
│ │ │ │ │ └── infrastructure.ts
│ │ │ │ ├── cdk.context.json
│ │ │ │ ├── cdk.json
│ │ │ │ ├── lib/
│ │ │ │ │ └── infrastructure-stack.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── sdk-perf/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── src/
│ │ │ │ ├── ddb_serde.rs
│ │ │ │ ├── main.rs
│ │ │ │ ├── results.rs
│ │ │ │ └── test_util.rs
│ │ │ └── standardized-benches/
│ │ │ ├── Cargo.toml
│ │ │ ├── README.md
│ │ │ ├── e2e-configs/
│ │ │ │ ├── ddb-getitem-1KiB-latency-benchmark.json
│ │ │ │ ├── ddb-putitem-1KiB-latency-benchmark.json
│ │ │ │ ├── s3-download-256KiB-throughput-benchmark.json
│ │ │ │ └── s3-upload-256KiB-throughput-benchmark.json
│ │ │ └── src/
│ │ │ ├── bench_utils.rs
│ │ │ ├── bin/
│ │ │ │ ├── ddb_e2e.rs
│ │ │ │ ├── lambda_endpoint.rs
│ │ │ │ ├── s3_e2e.rs
│ │ │ │ └── s3_endpoint.rs
│ │ │ ├── e2e/
│ │ │ │ ├── benchmark_types.rs
│ │ │ │ ├── ddb.rs
│ │ │ │ └── s3.rs
│ │ │ ├── e2e.rs
│ │ │ ├── endpoint/
│ │ │ │ ├── lambda.rs
│ │ │ │ └── s3.rs
│ │ │ ├── endpoint.rs
│ │ │ └── lib.rs
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── integration-tests/
│ │ │ ├── .gitignore
│ │ │ ├── Cargo.toml
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── bedrockruntime/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ └── environment_token_provider.rs
│ │ │ ├── cloudwatchlogs/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── event_stream.rs
│ │ │ │ └── success.json
│ │ │ ├── codecatalyst/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── sso_bearer_auth.json
│ │ │ │ └── sso_bearer_auth.rs
│ │ │ ├── dynamodb/
│ │ │ │ ├── Cargo.toml
│ │ │ │ ├── benches/
│ │ │ │ │ ├── deserialization_bench.rs
│ │ │ │ │ └── serialization_bench.rs
│ │ │ │ └── tests/
│ │ │ │ ├── account-based-endpoints.rs
│ │ │ │ ├── auth_scheme_error.rs
│ │ │ │ ├── build-errors.rs
│ │ │ │ ├── cloning.rs
│ │ │ │ ├── data.json
│ │ │ │ ├── endpoints.rs
│ │ │ │ ├── movies.rs
│ │ │ │ ├── paginators.rs
│ │ │ │ ├── retries-with-client-rate-limiting.rs
│ │ │ │ ├── shared-config.rs
│ │ │ │ ├── test-error-classification.rs
│ │ │ │ └── timeouts.rs
│ │ │ ├── ec2/
│ │ │ │ ├── Cargo.toml
│ │ │ │ ├── src/
│ │ │ │ │ └── lib.rs
│ │ │ │ └── tests/
│ │ │ │ ├── instance-status-ok-waiter-success.json
│ │ │ │ ├── paginators.rs
│ │ │ │ └── waiters.rs
│ │ │ ├── glacier/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── custom-headers.rs
│ │ │ │ └── test-file.txt
│ │ │ ├── iam/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ └── resolve-global-endpoint.rs
│ │ │ ├── kms/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── integration.rs
│ │ │ │ ├── retryable_errors.rs
│ │ │ │ ├── sensitive-it.rs
│ │ │ │ └── traits.rs
│ │ │ ├── lambda/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── blns/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ └── blns.txt
│ │ │ │ ├── naughty-strings-client-context.rs
│ │ │ │ └── request_id.rs
│ │ │ ├── no-default-features/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ └── client-construction.rs
│ │ │ ├── polly/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ └── presigning.rs
│ │ │ ├── s3/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── alternative-async-runtime.rs
│ │ │ │ ├── auth_scheme_preference.rs
│ │ │ │ ├── aws_chunked.rs
│ │ │ │ ├── blns/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ └── blns.txt
│ │ │ │ ├── body_size_hint.rs
│ │ │ │ ├── bucket-required.rs
│ │ │ │ ├── business_metrics.rs
│ │ │ │ ├── checksums.rs
│ │ │ │ ├── client_construction.rs
│ │ │ │ ├── concurrency.rs
│ │ │ │ ├── config-override.rs
│ │ │ │ ├── config_to_builder.rs
│ │ │ │ ├── content-length-enforcement.rs
│ │ │ │ ├── credential_features.rs
│ │ │ │ ├── customizable-operation.rs
│ │ │ │ ├── data/
│ │ │ │ │ ├── aws_chunked/
│ │ │ │ │ │ ├── chunk-signing.json
│ │ │ │ │ │ ├── custom-chunk-size.json
│ │ │ │ │ │ └── no-chunking.json
│ │ │ │ │ ├── content-length-enforcement/
│ │ │ │ │ │ ├── get-object-long.json
│ │ │ │ │ │ ├── get-object-short.json
│ │ │ │ │ │ └── head-object.json
│ │ │ │ │ ├── express/
│ │ │ │ │ │ └── mixed-auths.json
│ │ │ │ │ ├── no_auth/
│ │ │ │ │ │ ├── get-object.json
│ │ │ │ │ │ ├── head-object.json
│ │ │ │ │ │ ├── list-objects-v2.json
│ │ │ │ │ │ └── list-objects.json
│ │ │ │ │ └── request-information-headers/
│ │ │ │ │ ├── slow-network-and-late-client-clock.json
│ │ │ │ │ ├── three-retries_and-then-success.json
│ │ │ │ │ └── three-successful-attempts.json
│ │ │ │ ├── endpoints.rs
│ │ │ │ ├── expires_interceptor.rs
│ │ │ │ ├── express.rs
│ │ │ │ ├── identity-cache.rs
│ │ │ │ ├── ignore-invalid-xml-body-root.rs
│ │ │ │ ├── interceptors.rs
│ │ │ │ ├── mocks.rs
│ │ │ │ ├── naughty-string-metadata.rs
│ │ │ │ ├── no_auth.rs
│ │ │ │ ├── normalize-uri-path.rs
│ │ │ │ ├── presigning.rs
│ │ │ │ ├── query-strings-are-correctly-encoded.rs
│ │ │ │ ├── reconnects.rs
│ │ │ │ ├── recursion-detection.rs
│ │ │ │ ├── request_id.rs
│ │ │ │ ├── request_information_headers.rs
│ │ │ │ ├── required-query-params.rs
│ │ │ │ ├── retry-classifier-customization.rs
│ │ │ │ ├── select-object-content.json
│ │ │ │ ├── select-object-content.rs
│ │ │ │ ├── service_timeout_overrides.rs
│ │ │ │ ├── signing-it.rs
│ │ │ │ ├── sigv4a_signing_region_set.rs
│ │ │ │ ├── size-type.rs
│ │ │ │ ├── stalled-stream-protection.rs
│ │ │ │ ├── status-200-errors.rs
│ │ │ │ ├── streaming-response.rs
│ │ │ │ ├── timeouts.rs
│ │ │ │ └── token_bucket_time_source.rs
│ │ │ ├── s3control/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ └── signing-it.rs
│ │ │ ├── sts/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── retry_idp_comms_err.rs
│ │ │ │ └── signing-it.rs
│ │ │ ├── telemetry/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── metrics.rs
│ │ │ │ ├── observability_feature_metrics.rs
│ │ │ │ ├── spans.rs
│ │ │ │ └── utils/
│ │ │ │ └── mod.rs
│ │ │ ├── test.sh
│ │ │ ├── timestreamquery/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── endpoint_disco.rs
│ │ │ │ └── traffic.json
│ │ │ ├── transcribestreaming/
│ │ │ │ ├── Cargo.toml
│ │ │ │ └── tests/
│ │ │ │ ├── error.json
│ │ │ │ ├── success.json
│ │ │ │ └── test.rs
│ │ │ ├── webassembly-no-os/
│ │ │ │ ├── .cargo/
│ │ │ │ │ └── config.toml
│ │ │ │ ├── Cargo.toml
│ │ │ │ ├── run-wasm32-unknown-unknown.sh
│ │ │ │ └── src/
│ │ │ │ ├── lib.rs
│ │ │ │ ├── wasm32_unknown_unknown.rs
│ │ │ │ └── wasm32_wasip2.rs
│ │ │ └── webassembly-wstd/
│ │ │ ├── .cargo/
│ │ │ │ └── config.toml
│ │ │ ├── Cargo.toml
│ │ │ └── src/
│ │ │ └── lib.rs
│ │ ├── sdk-external-types.toml
│ │ ├── sync-models.py
│ │ └── test-services.py
│ └── sdk-adhoc-test/
│ ├── .gitignore
│ ├── README.md
│ ├── build.gradle.kts
│ └── models/
│ ├── apigateway-rules.smithy
│ ├── required-value-test.smithy
│ └── single-static-endpoint.smithy
├── build.gradle.kts
├── buildSrc/
│ ├── build.gradle.kts
│ ├── settings.gradle.kts
│ └── src/
│ ├── main/
│ │ └── kotlin/
│ │ ├── CodegenTestCommon.kt
│ │ ├── CrateSet.kt
│ │ ├── Extensions.kt
│ │ ├── HashUtils.kt
│ │ ├── ManifestPatcher.kt
│ │ ├── PropertyRetriever.kt
│ │ ├── RustBuildTool.kt
│ │ ├── aws/
│ │ │ └── sdk/
│ │ │ ├── CrateVersioner.kt
│ │ │ ├── DocsLandingPage.kt
│ │ │ ├── ModelMetadata.kt
│ │ │ ├── ServiceLoader.kt
│ │ │ └── VersionsManifest.kt
│ │ ├── smithy-rs.kotlin-conventions.gradle.kts
│ │ ├── smithy-rs.publishing-conventions.gradle.kts
│ │ └── tasks/
│ │ ├── CheckMavenCentralPublishingNeeded.kt
│ │ └── VerifyCodegenVersionBump.kt
│ └── test/
│ └── kotlin/
│ ├── CrateSetTest.kt
│ ├── ManifestPatcherTest.kt
│ └── aws/
│ └── sdk/
│ ├── IndependentCrateVersionerTest.kt
│ ├── ModelMetadataTest.kt
│ └── VersionsManifestTest.kt
├── ci
├── ci.mk
├── clippy-root.toml
├── codegen-client/
│ ├── build.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── kotlin/
│ │ │ └── software/
│ │ │ └── amazon/
│ │ │ └── smithy/
│ │ │ └── rust/
│ │ │ └── codegen/
│ │ │ └── client/
│ │ │ ├── smithy/
│ │ │ │ ├── ClientCodegenContext.kt
│ │ │ │ ├── ClientCodegenVisitor.kt
│ │ │ │ ├── ClientReExports.kt
│ │ │ │ ├── ClientReservedWords.kt
│ │ │ │ ├── ClientRustModule.kt
│ │ │ │ ├── ClientRustSettings.kt
│ │ │ │ ├── RustClientCodegenPlugin.kt
│ │ │ │ ├── auth/
│ │ │ │ │ ├── AuthDecorator.kt
│ │ │ │ │ ├── AuthIndex.kt
│ │ │ │ │ ├── AuthSchemeParamsGenerator.kt
│ │ │ │ │ ├── AuthSchemeResolverGenerator.kt
│ │ │ │ │ └── AuthTypesGenerator.kt
│ │ │ │ ├── customizations/
│ │ │ │ │ ├── AuthEndpointOrchestrationV2MarkerCustomization.kt
│ │ │ │ │ ├── ClientCustomizations.kt
│ │ │ │ │ ├── ClientDocsGenerator.kt
│ │ │ │ │ ├── ConnectionPoisoningConfigCustomization.kt
│ │ │ │ │ ├── DocsRsMetadataDecorator.kt
│ │ │ │ │ ├── HttpAuthDecorator.kt
│ │ │ │ │ ├── HttpChecksumRequiredGenerator.kt
│ │ │ │ │ ├── HttpConnectorConfigDecorator.kt
│ │ │ │ │ ├── IdempotencyTokenDecorator.kt
│ │ │ │ │ ├── IdempotencyTokenGenerator.kt
│ │ │ │ │ ├── IdentityCacheDecorator.kt
│ │ │ │ │ ├── InterceptorConfigCustomization.kt
│ │ │ │ │ ├── ManifestHintsDecorator.kt
│ │ │ │ │ ├── MetadataCustomization.kt
│ │ │ │ │ ├── NoAuthDecorator.kt
│ │ │ │ │ ├── RequestCompressionGenerator.kt
│ │ │ │ │ ├── ResiliencyConfigCustomization.kt
│ │ │ │ │ ├── RetryClassifierConfigCustomization.kt
│ │ │ │ │ ├── RetryModeFeatureTrackerRuntimePluginCustomization.kt
│ │ │ │ │ ├── SensitiveOutputDecorator.kt
│ │ │ │ │ ├── StaticSdkFeatureTrackerDecorator.kt
│ │ │ │ │ └── TimeSourceCustomization.kt
│ │ │ │ ├── customize/
│ │ │ │ │ ├── ClientCodegenDecorator.kt
│ │ │ │ │ ├── ConditionalDecorator.kt
│ │ │ │ │ └── RequiredCustomizations.kt
│ │ │ │ ├── endpoint/
│ │ │ │ │ ├── ClientContextConfigCustomization.kt
│ │ │ │ │ ├── EndpointConfigCustomization.kt
│ │ │ │ │ ├── EndpointParamsDecorator.kt
│ │ │ │ │ ├── EndpointRulesetIndex.kt
│ │ │ │ │ ├── EndpointTypesGenerator.kt
│ │ │ │ │ ├── EndpointsDecorator.kt
│ │ │ │ │ ├── Util.kt
│ │ │ │ │ ├── generators/
│ │ │ │ │ │ ├── EndpointBddGenerator.kt
│ │ │ │ │ │ ├── EndpointParamsGenerator.kt
│ │ │ │ │ │ ├── EndpointParamsInterceptorGenerator.kt
│ │ │ │ │ │ ├── EndpointResolverGenerator.kt
│ │ │ │ │ │ └── EndpointTestGenerator.kt
│ │ │ │ │ └── rulesgen/
│ │ │ │ │ ├── BddExpressionGenerator.kt
│ │ │ │ │ ├── ExpressionGenerator.kt
│ │ │ │ │ ├── LiteralGenerator.kt
│ │ │ │ │ ├── Ownership.kt
│ │ │ │ │ ├── StdLib.kt
│ │ │ │ │ └── TemplateGenerator.kt
│ │ │ │ ├── generators/
│ │ │ │ │ ├── ClientBuilderInstantiator.kt
│ │ │ │ │ ├── ClientEnumGenerator.kt
│ │ │ │ │ ├── ClientInstantiator.kt
│ │ │ │ │ ├── ClientRuntimeTypesReExportGenerator.kt
│ │ │ │ │ ├── ConfigOverrideRuntimePluginGenerator.kt
│ │ │ │ │ ├── EndpointTraitBindingGenerator.kt
│ │ │ │ │ ├── ErrorCorrection.kt
│ │ │ │ │ ├── NestedAccessorGenerator.kt
│ │ │ │ │ ├── OperationCustomization.kt
│ │ │ │ │ ├── OperationGenerator.kt
│ │ │ │ │ ├── OperationRuntimePluginGenerator.kt
│ │ │ │ │ ├── PaginatorGenerator.kt
│ │ │ │ │ ├── SensitiveIndex.kt
│ │ │ │ │ ├── ServiceGenerator.kt
│ │ │ │ │ ├── ServiceRuntimePluginGenerator.kt
│ │ │ │ │ ├── client/
│ │ │ │ │ │ ├── CustomizableOperationDecorator.kt
│ │ │ │ │ │ ├── CustomizableOperationGenerator.kt
│ │ │ │ │ │ ├── CustomizableOperationImplGenerator.kt
│ │ │ │ │ │ ├── FluentBuilderGenerator.kt
│ │ │ │ │ │ ├── FluentClientDecorator.kt
│ │ │ │ │ │ ├── FluentClientDocs.kt
│ │ │ │ │ │ └── FluentClientGenerator.kt
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── IdempotencyTokenProviderCustomization.kt
│ │ │ │ │ │ ├── ServiceConfigGenerator.kt
│ │ │ │ │ │ └── StalledStreamProtectionConfigCustomization.kt
│ │ │ │ │ ├── error/
│ │ │ │ │ │ ├── ErrorCustomization.kt
│ │ │ │ │ │ ├── ErrorGenerator.kt
│ │ │ │ │ │ ├── OperationErrorGenerator.kt
│ │ │ │ │ │ └── ServiceErrorGenerator.kt
│ │ │ │ │ ├── http/
│ │ │ │ │ │ ├── RequestBindingGenerator.kt
│ │ │ │ │ │ └── ResponseBindingGenerator.kt
│ │ │ │ │ ├── protocol/
│ │ │ │ │ │ ├── ClientProtocolTestGenerator.kt
│ │ │ │ │ │ ├── ProtocolParserGenerator.kt
│ │ │ │ │ │ ├── RequestSerializerGenerator.kt
│ │ │ │ │ │ ├── ResponseDeserializerGenerator.kt
│ │ │ │ │ │ └── SerdeBenchmarkTestGenerator.kt
│ │ │ │ │ └── waiters/
│ │ │ │ │ ├── RustJmespathShapeTraversalGenerator.kt
│ │ │ │ │ ├── RustWaiterMatcherGenerator.kt
│ │ │ │ │ ├── WaitableGenerator.kt
│ │ │ │ │ └── WaiterAcceptorGenerator.kt
│ │ │ │ ├── protocols/
│ │ │ │ │ ├── ClientProtocolLoader.kt
│ │ │ │ │ └── HttpBoundProtocolGenerator.kt
│ │ │ │ ├── traits/
│ │ │ │ │ ├── IncompatibleWithStalledStreamProtectionTrait.kt
│ │ │ │ │ └── IsTruncatedPaginatorTrait.kt
│ │ │ │ └── transformers/
│ │ │ │ ├── AddErrorMessage.kt
│ │ │ │ └── DisableStalledStreamProtection.kt
│ │ │ └── testutil/
│ │ │ ├── ClientCodegenIntegrationTest.kt
│ │ │ ├── EndpointTestDiscovery.kt
│ │ │ └── TestHelpers.kt
│ │ └── resources/
│ │ └── META-INF/
│ │ └── services/
│ │ └── software.amazon.smithy.build.SmithyBuildPlugin
│ └── test/
│ └── kotlin/
│ └── software/
│ └── amazon/
│ └── smithy/
│ └── rust/
│ └── codegen/
│ └── client/
│ ├── smithy/
│ │ ├── BigNumberPrecisionTest.kt
│ │ ├── ClientCodegenVisitorTest.kt
│ │ ├── EventStreamSymbolProviderTest.kt
│ │ ├── NamingObstacleCourseTest.kt
│ │ ├── StreamingShapeSymbolProviderTest.kt
│ │ ├── auth/
│ │ │ ├── AuthDecoratorTest.kt
│ │ │ ├── AuthIndexTest.kt
│ │ │ └── AuthTypesGeneratorTest.kt
│ │ ├── customizations/
│ │ │ ├── HttpAuthDecoratorTest.kt
│ │ │ ├── MetadataCustomizationTest.kt
│ │ │ ├── ResiliencyConfigCustomizationTest.kt
│ │ │ └── SensitiveOutputDecoratorTest.kt
│ │ ├── endpoint/
│ │ │ ├── ClientContextConfigCustomizationTest.kt
│ │ │ ├── EndpointParamsGeneratorTest.kt
│ │ │ ├── EndpointResolverGeneratorTest.kt
│ │ │ ├── EndpointsDecoratorTest.kt
│ │ │ └── rulesgen/
│ │ │ ├── ExpressionGeneratorTest.kt
│ │ │ └── TemplateGeneratorTest.kt
│ │ ├── generators/
│ │ │ ├── ClientEnumGeneratorTest.kt
│ │ │ ├── ClientInstantiatorTest.kt
│ │ │ ├── ClientRuntimeTypesReExportGeneratorTest.kt
│ │ │ ├── ConfigOverrideRuntimePluginGeneratorTest.kt
│ │ │ ├── EndpointTraitBindingsTest.kt
│ │ │ ├── ErrorCorrectionTest.kt
│ │ │ ├── PaginatorGeneratorTest.kt
│ │ │ ├── SensitiveIndexTest.kt
│ │ │ ├── client/
│ │ │ │ ├── CustomizableOperationGeneratorTest.kt
│ │ │ │ └── FluentClientGeneratorTest.kt
│ │ │ ├── config/
│ │ │ │ └── ServiceConfigGeneratorTest.kt
│ │ │ ├── error/
│ │ │ │ ├── ErrorGeneratorTest.kt
│ │ │ │ ├── OperationErrorGeneratorTest.kt
│ │ │ │ └── ServiceErrorGeneratorTest.kt
│ │ │ ├── http/
│ │ │ │ ├── RequestBindingGeneratorTest.kt
│ │ │ │ └── ResponseBindingGeneratorTest.kt
│ │ │ ├── protocol/
│ │ │ │ ├── ProtocolParserGeneratorTest.kt
│ │ │ │ └── ProtocolTestGeneratorTest.kt
│ │ │ └── waiters/
│ │ │ ├── RustJmespathShapeTraversalGeneratorTest.kt
│ │ │ └── RustWaiterMatcherGeneratorTest.kt
│ │ ├── protocols/
│ │ │ ├── AwsQueryCompatibleTest.kt
│ │ │ ├── AwsQueryTest.kt
│ │ │ ├── ClientProtocolLoaderTest.kt
│ │ │ ├── Ec2QueryTest.kt
│ │ │ ├── RestJsonTest.kt
│ │ │ ├── RestXmlTest.kt
│ │ │ └── eventstream/
│ │ │ ├── ClientEventStreamMarshallerGeneratorTest.kt
│ │ │ └── ClientEventStreamUnmarshallerGeneratorTest.kt
│ │ └── transformers/
│ │ └── DisableStalledStreamProtectionTest.kt
│ ├── testutil/
│ │ └── Matchers.kt
│ └── tool/
│ └── TimeTestSuiteGenerator.kt
├── codegen-client-test/
│ ├── .gitignore
│ ├── README.md
│ ├── build.gradle.kts
│ └── model/
│ ├── basic-enums.smithy
│ ├── dynamodb.json
│ ├── endpoint-rules.smithy
│ ├── error-correction-nullability-test.smithy
│ ├── main.smithy
│ ├── more-nesting.smithy
│ ├── nested.smithy
│ ├── rest-xml-extras.smithy
│ └── rest-xml-unwrapped-errors.smithy
├── codegen-core/
│ ├── build.gradle.kts
│ ├── common-test-models/
│ │ ├── aws-json-query-compat.smithy
│ │ ├── big-numbers.smithy
│ │ ├── constraints.smithy
│ │ ├── ebs.json
│ │ ├── misc.smithy
│ │ ├── naming-obstacle-course-casing.smithy
│ │ ├── naming-obstacle-course-ops.smithy
│ │ ├── naming-obstacle-course-structs.smithy
│ │ ├── pokemon-awsjson.smithy
│ │ ├── pokemon-common.smithy
│ │ ├── pokemon.smithy
│ │ ├── rest-json-extras.smithy
│ │ ├── rpcv2Cbor-extras.smithy
│ │ ├── simple.smithy
│ │ └── unique-items.smithy
│ └── src/
│ ├── main/
│ │ └── kotlin/
│ │ └── software/
│ │ └── amazon/
│ │ └── smithy/
│ │ └── rust/
│ │ └── codegen/
│ │ └── core/
│ │ ├── Version.kt
│ │ ├── rustlang/
│ │ │ ├── CargoDependency.kt
│ │ │ ├── RustGenerics.kt
│ │ │ ├── RustModule.kt
│ │ │ ├── RustReservedWords.kt
│ │ │ ├── RustType.kt
│ │ │ ├── RustWriter.kt
│ │ │ ├── UseDeclarations.kt
│ │ │ └── Writable.kt
│ │ ├── smithy/
│ │ │ ├── CodegenContext.kt
│ │ │ ├── CodegenDelegator.kt
│ │ │ ├── CodegenTarget.kt
│ │ │ ├── CoreRustSettings.kt
│ │ │ ├── DirectedWalker.kt
│ │ │ ├── EventStreamSymbolProvider.kt
│ │ │ ├── PublicImportSymbolProvider.kt
│ │ │ ├── RuntimeType.kt
│ │ │ ├── RustSymbolProvider.kt
│ │ │ ├── StreamingTraitSymbolProvider.kt
│ │ │ ├── SymbolExt.kt
│ │ │ ├── SymbolMetadataProvider.kt
│ │ │ ├── SymbolVisitor.kt
│ │ │ ├── customizations/
│ │ │ │ ├── AllowLintsCustomization.kt
│ │ │ │ ├── CrateVersionCustomization.kt
│ │ │ │ └── SmithyTypesPubUseExtra.kt
│ │ │ ├── customize/
│ │ │ │ ├── CoreCodegenDecorator.kt
│ │ │ │ └── Customization.kt
│ │ │ ├── generators/
│ │ │ │ ├── BuilderGenerator.kt
│ │ │ │ ├── BuilderInstantiator.kt
│ │ │ │ ├── CargoTomlGenerator.kt
│ │ │ │ ├── DefaultValueGenerator.kt
│ │ │ │ ├── EnumGenerator.kt
│ │ │ │ ├── Instantiator.kt
│ │ │ │ ├── LibRsGenerator.kt
│ │ │ │ ├── StructureGenerator.kt
│ │ │ │ ├── UnionGenerator.kt
│ │ │ │ ├── error/
│ │ │ │ │ └── ErrorImplGenerator.kt
│ │ │ │ ├── http/
│ │ │ │ │ └── HttpBindingGenerator.kt
│ │ │ │ └── protocol/
│ │ │ │ ├── ProtocolGenerator.kt
│ │ │ │ ├── ProtocolSupport.kt
│ │ │ │ └── ProtocolTestGenerator.kt
│ │ │ ├── protocols/
│ │ │ │ ├── AwsJson.kt
│ │ │ │ ├── AwsQuery.kt
│ │ │ │ ├── AwsQueryCompatible.kt
│ │ │ │ ├── Ec2Query.kt
│ │ │ │ ├── HttpBindingResolver.kt
│ │ │ │ ├── HttpBoundProtocolPayloadGenerator.kt
│ │ │ │ ├── Protocol.kt
│ │ │ │ ├── ProtocolFunctions.kt
│ │ │ │ ├── ProtocolLoader.kt
│ │ │ │ ├── RestJson.kt
│ │ │ │ ├── RestXml.kt
│ │ │ │ ├── RpcV2Cbor.kt
│ │ │ │ ├── XmlNameIndex.kt
│ │ │ │ ├── parse/
│ │ │ │ │ ├── AwsQueryParserGenerator.kt
│ │ │ │ │ ├── CborParserGenerator.kt
│ │ │ │ │ ├── Ec2QueryParserGenerator.kt
│ │ │ │ │ ├── EventStreamUnmarshallerGenerator.kt
│ │ │ │ │ ├── JsonParserGenerator.kt
│ │ │ │ │ ├── RestXmlParserGenerator.kt
│ │ │ │ │ ├── ReturnSymbolToParse.kt
│ │ │ │ │ ├── StructuredDataParserGenerator.kt
│ │ │ │ │ └── XmlBindingTraitParserGenerator.kt
│ │ │ │ └── serialize/
│ │ │ │ ├── AwsQuerySerializerGenerator.kt
│ │ │ │ ├── CborSerializerGenerator.kt
│ │ │ │ ├── Ec2QuerySerializerGenerator.kt
│ │ │ │ ├── EventStreamErrorMarshallerGenerator.kt
│ │ │ │ ├── EventStreamMarshallerGenerator.kt
│ │ │ │ ├── JsonSerializerGenerator.kt
│ │ │ │ ├── QuerySerializerGenerator.kt
│ │ │ │ ├── SerializerUtil.kt
│ │ │ │ ├── StructuredDataSerializerGenerator.kt
│ │ │ │ ├── ValueExpression.kt
│ │ │ │ └── XmlBindingTraitSerializerGenerator.kt
│ │ │ ├── traits/
│ │ │ │ ├── AllowInvalidXmlRoot.kt
│ │ │ │ ├── RustBoxTrait.kt
│ │ │ │ ├── SyntheticEventStreamUnionTrait.kt
│ │ │ │ ├── SyntheticInputTrait.kt
│ │ │ │ └── SyntheticOutputTrait.kt
│ │ │ └── transformers/
│ │ │ ├── EventStreamNormalizer.kt
│ │ │ ├── OperationNormalizer.kt
│ │ │ └── RecursiveShapeBoxer.kt
│ │ ├── testutil/
│ │ │ ├── BasicTestModels.kt
│ │ │ ├── CodegenIntegrationTest.kt
│ │ │ ├── DefaultBuilderInstantiator.kt
│ │ │ ├── EventStreamMarshallTestCases.kt
│ │ │ ├── EventStreamTestModels.kt
│ │ │ ├── EventStreamUnmarshallTestCases.kt
│ │ │ ├── NamingObstacleCourseTestModels.kt
│ │ │ ├── Rust.kt
│ │ │ └── TestHelpers.kt
│ │ └── util/
│ │ ├── Exec.kt
│ │ ├── LetIf.kt
│ │ ├── Map.kt
│ │ ├── Option.kt
│ │ ├── Panic.kt
│ │ ├── Smithy.kt
│ │ ├── Strings.kt
│ │ └── Synthetics.kt
│ └── test/
│ ├── kotlin/
│ │ └── software/
│ │ └── amazon/
│ │ └── smithy/
│ │ └── rust/
│ │ └── codegen/
│ │ └── core/
│ │ ├── VersionTest.kt
│ │ ├── rustlang/
│ │ │ ├── CargoDependencyTest.kt
│ │ │ ├── InlineDependencyTest.kt
│ │ │ ├── RustGenericsTest.kt
│ │ │ ├── RustReservedWordsTest.kt
│ │ │ ├── RustTypeTest.kt
│ │ │ ├── RustWriterTest.kt
│ │ │ ├── UseDeclarationsTest.kt
│ │ │ └── WritableTest.kt
│ │ ├── smithy/
│ │ │ ├── CodegenDelegatorTest.kt
│ │ │ ├── RuntimeTypeTest.kt
│ │ │ ├── SymbolVisitorTest.kt
│ │ │ ├── customizations/
│ │ │ │ └── SmithyTypesPubUseExtraTest.kt
│ │ │ ├── generators/
│ │ │ │ ├── BuilderGeneratorTest.kt
│ │ │ │ ├── CargoTomlGeneratorTest.kt
│ │ │ │ ├── EnumGeneratorTest.kt
│ │ │ │ ├── InstantiatorTest.kt
│ │ │ │ ├── StructureGeneratorTest.kt
│ │ │ │ ├── TestEnumType.kt
│ │ │ │ ├── UnionGeneratorTest.kt
│ │ │ │ └── error/
│ │ │ │ └── ErrorImplGeneratorTest.kt
│ │ │ ├── protocols/
│ │ │ │ ├── ProtocolFunctionsTest.kt
│ │ │ │ ├── parse/
│ │ │ │ │ ├── AwsQueryParserGeneratorTest.kt
│ │ │ │ │ ├── CborParserGeneratorTest.kt
│ │ │ │ │ ├── Ec2QueryParserGeneratorTest.kt
│ │ │ │ │ ├── JsonParserGeneratorTest.kt
│ │ │ │ │ └── XmlBindingTraitParserGeneratorTest.kt
│ │ │ │ └── serialize/
│ │ │ │ ├── AwsQuerySerializerGeneratorTest.kt
│ │ │ │ ├── CborSerializerGeneratorTest.kt
│ │ │ │ ├── Ec2QuerySerializerGeneratorTest.kt
│ │ │ │ ├── JsonSerializerGeneratorTest.kt
│ │ │ │ └── XmlBindingTraitSerializerGeneratorTest.kt
│ │ │ └── transformers/
│ │ │ ├── EventStreamNormalizerTest.kt
│ │ │ ├── OperationNormalizerTest.kt
│ │ │ ├── RecursiveShapeBoxerTest.kt
│ │ │ └── RecursiveShapesIntegrationTest.kt
│ │ └── util/
│ │ ├── ExecKtTest.kt
│ │ ├── ExtensionsTest.kt
│ │ ├── MapTest.kt
│ │ ├── RustToolChainTomlTest.kt
│ │ ├── StringsTest.kt
│ │ └── SyntheticsTest.kt
│ └── resources/
│ ├── allNames.txt
│ └── testOutput.txt
├── codegen-serde/
│ ├── build.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── kotlin/
│ │ │ └── software/
│ │ │ └── amazon/
│ │ │ └── smithy/
│ │ │ └── rust/
│ │ │ └── codegen/
│ │ │ └── serde/
│ │ │ ├── SerdeDecorator.kt
│ │ │ ├── SerializeImplGenerator.kt
│ │ │ ├── SupportStructures.kt
│ │ │ └── Traits.kt
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── services/
│ │ │ ├── software.amazon.smithy.model.traits.TraitService
│ │ │ ├── software.amazon.smithy.rust.codegen.client.smithy.customize.ClientCodegenDecorator
│ │ │ └── software.amazon.smithy.rust.codegen.server.smithy.customize.ServerCodegenDecorator
│ │ └── smithy/
│ │ ├── manifest
│ │ └── serde.smithy
│ └── test/
│ └── kotlin/
│ └── software/
│ └── amazon/
│ └── smithy/
│ └── rust/
│ └── codegen/
│ └── serde/
│ ├── SerdeDecoratorTest.kt
│ └── SerdeProtocolTestTest.kt
├── codegen-server/
│ ├── README.md
│ ├── build.gradle.kts
│ ├── codegen-server-python/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── main/
│ │ │ ├── kotlin/
│ │ │ │ └── software/
│ │ │ │ └── amazon/
│ │ │ │ └── smithy/
│ │ │ │ └── rust/
│ │ │ │ └── codegen/
│ │ │ │ └── server/
│ │ │ │ └── python/
│ │ │ │ └── smithy/
│ │ │ │ ├── PythonEventStreamSymbolProvider.kt
│ │ │ │ ├── PythonServerCargoDependency.kt
│ │ │ │ ├── PythonServerCodegenVisitor.kt
│ │ │ │ ├── PythonServerRuntimeType.kt
│ │ │ │ ├── PythonServerRustModule.kt
│ │ │ │ ├── PythonServerSymbolProvider.kt
│ │ │ │ ├── PythonType.kt
│ │ │ │ ├── RustServerCodegenPythonPlugin.kt
│ │ │ │ ├── customizations/
│ │ │ │ │ └── PythonServerCodegenDecorator.kt
│ │ │ │ ├── generators/
│ │ │ │ │ ├── ConstrainedPythonBlobGenerator.kt
│ │ │ │ │ ├── PythonApplicationGenerator.kt
│ │ │ │ │ ├── PythonServerEnumGenerator.kt
│ │ │ │ │ ├── PythonServerEventStreamErrorGenerator.kt
│ │ │ │ │ ├── PythonServerEventStreamWrapperGenerator.kt
│ │ │ │ │ ├── PythonServerModuleGenerator.kt
│ │ │ │ │ ├── PythonServerOperationErrorGenerator.kt
│ │ │ │ │ ├── PythonServerOperationHandlerGenerator.kt
│ │ │ │ │ ├── PythonServerStructureGenerator.kt
│ │ │ │ │ └── PythonServerUnionGenerator.kt
│ │ │ │ ├── protocols/
│ │ │ │ │ └── PythonServerProtocolLoader.kt
│ │ │ │ └── testutil/
│ │ │ │ └── PythonServerTestHelpers.kt
│ │ │ └── resources/
│ │ │ ├── META-INF/
│ │ │ │ └── services/
│ │ │ │ └── software.amazon.smithy.build.SmithyBuildPlugin
│ │ │ ├── stubgen.py
│ │ │ └── stubgen.sh
│ │ └── test/
│ │ └── kotlin/
│ │ └── software/
│ │ └── amazon/
│ │ └── smithy/
│ │ └── rust/
│ │ └── codegen/
│ │ └── server/
│ │ └── python/
│ │ └── smithy/
│ │ └── generators/
│ │ ├── PythonServerRequiredPrecedeOptionalTest.kt
│ │ ├── PythonServerSymbolProviderTest.kt
│ │ ├── PythonServerTypesTest.kt
│ │ └── PythonTypeInformationGenerationTest.kt
│ ├── codegen-server-typescript/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── main/
│ │ ├── kotlin/
│ │ │ └── software/
│ │ │ └── amazon/
│ │ │ └── smithy/
│ │ │ └── rust/
│ │ │ └── codegen/
│ │ │ └── server/
│ │ │ └── typescript/
│ │ │ └── smithy/
│ │ │ ├── RustServerCodegenTsPlugin.kt
│ │ │ ├── TsServerCargoDependency.kt
│ │ │ ├── TsServerCodegenVisitor.kt
│ │ │ ├── TsServerModuleDocProvider.kt
│ │ │ ├── TsServerRuntimeType.kt
│ │ │ ├── TsServerSymbolProvider.kt
│ │ │ ├── customizations/
│ │ │ │ └── TsServerCodegenDecorator.kt
│ │ │ └── generators/
│ │ │ ├── TsApplicationGenerator.kt
│ │ │ ├── TsServerEnumGenerator.kt
│ │ │ ├── TsServerOperationErrorGenerator.kt
│ │ │ ├── TsServerOperationHandlerGenerator.kt
│ │ │ └── TsServerStructureGenerator.kt
│ │ └── resources/
│ │ └── META-INF/
│ │ └── services/
│ │ └── software.amazon.smithy.build.SmithyBuildPlugin
│ └── src/
│ ├── main/
│ │ ├── kotlin/
│ │ │ └── software/
│ │ │ └── amazon/
│ │ │ └── smithy/
│ │ │ └── rust/
│ │ │ └── codegen/
│ │ │ └── server/
│ │ │ └── smithy/
│ │ │ ├── ConstrainedShapeSymbolMetadataProvider.kt
│ │ │ ├── ConstrainedShapeSymbolProvider.kt
│ │ │ ├── ConstraintViolationSymbolProvider.kt
│ │ │ ├── Constraints.kt
│ │ │ ├── CustomShapeSymbolProvider.kt
│ │ │ ├── DeriveEqAndHashSymbolMetadataProvider.kt
│ │ │ ├── EnumTraitValidationErrorMessage.kt
│ │ │ ├── LengthTraitValidationErrorMessage.kt
│ │ │ ├── PatternTraitEscapedSpecialCharsValidator.kt
│ │ │ ├── PatternTraitValidationErrorMessage.kt
│ │ │ ├── PubCrateConstrainedShapeSymbolProvider.kt
│ │ │ ├── PubCrateConstraintViolationSymbolProvider.kt
│ │ │ ├── RangeTraitValidationErrorMessage.kt
│ │ │ ├── RustCrateInlineModuleComposingWriter.kt
│ │ │ ├── RustServerCodegenPlugin.kt
│ │ │ ├── ServerCargoDependency.kt
│ │ │ ├── ServerCodegenContext.kt
│ │ │ ├── ServerCodegenVisitor.kt
│ │ │ ├── ServerReservedWords.kt
│ │ │ ├── ServerRuntimeType.kt
│ │ │ ├── ServerRustModule.kt
│ │ │ ├── ServerRustSettings.kt
│ │ │ ├── ServerSymbolProviders.kt
│ │ │ ├── UnconstrainedShapeSymbolProvider.kt
│ │ │ ├── UniqueItemsTraitValidationErrorMessage.kt
│ │ │ ├── ValidateUnsupportedConstraints.kt
│ │ │ ├── customizations/
│ │ │ │ ├── AddTypeFieldToServerErrorsCborCustomization.kt
│ │ │ │ ├── AdditionalErrorsDecorator.kt
│ │ │ │ ├── BeforeEncodingMapOrCollectionCborCustomization.kt
│ │ │ │ ├── BeforeIteratingOverMapOrCollectionJsonCustomization.kt
│ │ │ │ ├── BeforeSerializingMemberCborCustomization.kt
│ │ │ │ ├── BeforeSerializingMemberJsonCustomization.kt
│ │ │ │ ├── CustomValidationExceptionWithReasonDecorator.kt
│ │ │ │ ├── ServerRequiredCustomizations.kt
│ │ │ │ ├── SigV4EventStreamDecorator.kt
│ │ │ │ ├── SigV4EventStreamSupportStructures.kt
│ │ │ │ ├── SmithyValidationExceptionDecorator.kt
│ │ │ │ └── UserProvidedValidationExceptionDecorator.kt
│ │ │ ├── customize/
│ │ │ │ └── ServerCodegenDecorator.kt
│ │ │ ├── generators/
│ │ │ │ ├── CollectionConstraintViolationGenerator.kt
│ │ │ │ ├── ConstrainedBlobGenerator.kt
│ │ │ │ ├── ConstrainedCollectionGenerator.kt
│ │ │ │ ├── ConstrainedMapGenerator.kt
│ │ │ │ ├── ConstrainedMapGeneratorCommon.kt
│ │ │ │ ├── ConstrainedNumberGenerator.kt
│ │ │ │ ├── ConstrainedShapeGeneratorCommon.kt
│ │ │ │ ├── ConstrainedStringGenerator.kt
│ │ │ │ ├── ConstrainedTraitForEnumGenerator.kt
│ │ │ │ ├── DocHandlerGenerator.kt
│ │ │ │ ├── LenghTraitCommon.kt
│ │ │ │ ├── MapConstraintViolationGenerator.kt
│ │ │ │ ├── PubCrateConstrainedCollectionGenerator.kt
│ │ │ │ ├── PubCrateConstrainedMapGenerator.kt
│ │ │ │ ├── ScopeMacroGenerator.kt
│ │ │ │ ├── ServerBuilderConstraintViolations.kt
│ │ │ │ ├── ServerBuilderGenerator.kt
│ │ │ │ ├── ServerBuilderGeneratorCommon.kt
│ │ │ │ ├── ServerBuilderGeneratorWithoutPublicConstrainedTypes.kt
│ │ │ │ ├── ServerBuilderSymbol.kt
│ │ │ │ ├── ServerEnumGenerator.kt
│ │ │ │ ├── ServerHttpSensitivityGenerator.kt
│ │ │ │ ├── ServerInstantiator.kt
│ │ │ │ ├── ServerOperationErrorGenerator.kt
│ │ │ │ ├── ServerOperationGenerator.kt
│ │ │ │ ├── ServerRootGenerator.kt
│ │ │ │ ├── ServerRuntimeTypesReExportsGenerator.kt
│ │ │ │ ├── ServerServiceGenerator.kt
│ │ │ │ ├── ServerStructureConstrainedTraitImpl.kt
│ │ │ │ ├── ServiceConfigGenerator.kt
│ │ │ │ ├── TraitInfo.kt
│ │ │ │ ├── UnconstrainedCollectionGenerator.kt
│ │ │ │ ├── UnconstrainedMapGenerator.kt
│ │ │ │ ├── UnconstrainedUnionGenerator.kt
│ │ │ │ ├── ValidationExceptionConversionGenerator.kt
│ │ │ │ ├── http/
│ │ │ │ │ ├── RestRequestSpecGenerator.kt
│ │ │ │ │ ├── ServerRequestBindingGenerator.kt
│ │ │ │ │ └── ServerResponseBindingGenerator.kt
│ │ │ │ └── protocol/
│ │ │ │ ├── ServerProtocol.kt
│ │ │ │ ├── ServerProtocolGenerator.kt
│ │ │ │ └── ServerProtocolTestGenerator.kt
│ │ │ ├── protocols/
│ │ │ │ ├── ServerAwsJson.kt
│ │ │ │ ├── ServerHttpBoundProtocolGenerator.kt
│ │ │ │ ├── ServerProtocolLoader.kt
│ │ │ │ ├── ServerRestJson.kt
│ │ │ │ ├── ServerRestXmlFactory.kt
│ │ │ │ └── ServerRpcV2CborFactory.kt
│ │ │ ├── testutil/
│ │ │ │ ├── HttpTestVersion.kt
│ │ │ │ ├── MultiVersionTestFailure.kt
│ │ │ │ ├── ServerCodegenIntegrationTest.kt
│ │ │ │ └── ServerTestHelpers.kt
│ │ │ ├── traits/
│ │ │ │ ├── ConstraintViolationRustBoxTrait.kt
│ │ │ │ ├── ShapeReachableFromOperationInputTagTrait.kt
│ │ │ │ └── SyntheticStructureFromConstrainedMemberTrait.kt
│ │ │ ├── transformers/
│ │ │ │ ├── AttachValidationExceptionToConstrainedOperationInputs.kt
│ │ │ │ ├── ConstrainedMemberTransform.kt
│ │ │ │ ├── RecursiveConstraintViolationBoxer.kt
│ │ │ │ ├── RemoveEbsModelValidationException.kt
│ │ │ │ ├── ServerProtocolBasedTransformationFactory.kt
│ │ │ │ └── ShapesReachableFromOperationInputTagger.kt
│ │ │ ├── util/
│ │ │ │ └── CustomValidationExceptionUtil.kt
│ │ │ └── validators/
│ │ │ └── CustomValidationExceptionValidator.kt
│ │ └── resources/
│ │ └── META-INF/
│ │ └── services/
│ │ ├── software.amazon.smithy.build.SmithyBuildPlugin
│ │ └── software.amazon.smithy.model.validation.Validator
│ └── test/
│ └── kotlin/
│ └── software/
│ └── amazon/
│ └── smithy/
│ └── rust/
│ └── codegen/
│ └── server/
│ └── smithy/
│ ├── ConstrainedShapeSymbolProviderTest.kt
│ ├── ConstraintsMemberShapeTest.kt
│ ├── ConstraintsTest.kt
│ ├── CustomShapeSymbolProviderTest.kt
│ ├── DeriveEqAndHashSymbolMetadataProviderTest.kt
│ ├── Http1xDependencyTest.kt
│ ├── NamingObstacleCourseTest.kt
│ ├── PatternTraitEscapedSpecialCharsValidatorTest.kt
│ ├── PubCrateConstrainedShapeSymbolProviderTest.kt
│ ├── RecursiveConstraintViolationsTest.kt
│ ├── RustCrateInlineModuleComposingWriterTest.kt
│ ├── ServerCodegenVisitorTest.kt
│ ├── ServerTypesReExportTest.kt
│ ├── UnconstrainedShapeSymbolProviderTest.kt
│ ├── UnionWithUnitTest.kt
│ ├── ValidateUnsupportedConstraintsAreNotUsedTest.kt
│ ├── customizations/
│ │ ├── AddValidationExceptionToConstrainedOperationsTest.kt
│ │ ├── AdditionalErrorsDecoratorTest.kt
│ │ ├── CustomValidationExceptionWithReasonDecoratorTest.kt
│ │ ├── PostprocessValidationExceptionNotAttachedErrorMessageDecoratorTest.kt
│ │ ├── SigV4EventStreamSupportStructuresTest.kt
│ │ └── UserProvidedValidationExceptionDecoratorTest.kt
│ ├── generators/
│ │ ├── ConstrainedBlobGeneratorTest.kt
│ │ ├── ConstrainedCollectionGeneratorTest.kt
│ │ ├── ConstrainedMapGeneratorTest.kt
│ │ ├── ConstrainedNumberGeneratorTest.kt
│ │ ├── ConstrainedStringGeneratorTest.kt
│ │ ├── EventStreamAcceptHeaderTest.kt
│ │ ├── ServerBuilderConstraintViolationsTest.kt
│ │ ├── ServerBuilderDefaultValuesTest.kt
│ │ ├── ServerBuilderGeneratorTest.kt
│ │ ├── ServerEnumGeneratorTest.kt
│ │ ├── ServerHttpSensitivityGeneratorTest.kt
│ │ ├── ServerInstantiatorTest.kt
│ │ ├── ServerOperationErrorGeneratorTest.kt
│ │ ├── ServerServiceGeneratorTest.kt
│ │ ├── ServiceConfigGeneratorTest.kt
│ │ ├── TestUtility.kt
│ │ ├── UnconstrainedCollectionGeneratorTest.kt
│ │ ├── UnconstrainedMapGeneratorTest.kt
│ │ └── UnconstrainedUnionGeneratorTest.kt
│ ├── protocols/
│ │ ├── eventstream/
│ │ │ ├── ServerEventStreamMarshallerGeneratorTest.kt
│ │ │ └── ServerEventStreamUnmarshallerGeneratorTest.kt
│ │ └── serialize/
│ │ ├── CborConstraintsIntegrationTest.kt
│ │ ├── CborSerializerAndParserGeneratorSerdeRoundTripIntegrationTest.kt
│ │ └── CborServiceShapePreservesCasing.kt
│ ├── testutil/
│ │ └── ServerHttpTestHelpers.kt
│ ├── transformers/
│ │ └── RecursiveConstraintViolationBoxerTest.kt
│ └── validators/
│ └── CustomValidationExceptionValidatorTest.kt
├── codegen-server-test/
│ ├── .gitignore
│ ├── README.md
│ ├── build.gradle.kts
│ ├── codegen-server-test-python/
│ │ └── build.gradle.kts
│ ├── codegen-server-test-typescript/
│ │ ├── build.gradle.kts
│ │ └── model/
│ │ ├── pokemon-common.smithy
│ │ └── pokemon.smithy
│ ├── custom-test-models/
│ │ └── custom-validation-exception.smithy
│ └── integration-tests/
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── eventstreams/
│ │ ├── Cargo.toml
│ │ ├── src/
│ │ │ ├── lib.rs
│ │ │ └── main.rs
│ │ └── tests/
│ │ └── structured_eventstream_tests.rs
│ └── eventstreams-legacy/
│ ├── Cargo.toml
│ ├── src/
│ │ ├── lib.rs
│ │ └── main.rs
│ └── tests/
│ └── structured_eventstream_tests.rs
├── codegen-traits/
│ ├── build.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── kotlin/
│ │ │ └── software/
│ │ │ └── amazon/
│ │ │ └── smithy/
│ │ │ └── framework/
│ │ │ └── rust/
│ │ │ ├── ValidationExceptionTrait.kt
│ │ │ ├── ValidationFieldListTrait.kt
│ │ │ ├── ValidationFieldMessageTrait.kt
│ │ │ ├── ValidationFieldNameTrait.kt
│ │ │ └── ValidationMessageTrait.kt
│ │ └── resources/
│ │ └── META-INF/
│ │ └── smithy/
│ │ ├── manifest
│ │ ├── services/
│ │ │ └── software.amazon.smithy.model.traits.TraitService
│ │ └── validation-exception.smithy
│ └── test/
│ └── kotlin/
│ └── software/
│ └── amazon/
│ └── smithy/
│ └── rust/
│ └── codegen/
│ └── traits/
│ ├── ValidationExceptionTraitTest.kt
│ ├── ValidationFieldListTraitTest.kt
│ ├── ValidationFieldMessageTraitTest.kt
│ ├── ValidationFieldNameTraitTest.kt
│ └── ValidationMessageTraitTest.kt
├── design/
│ ├── .gitignore
│ ├── README.md
│ ├── book.toml
│ ├── src/
│ │ ├── SUMMARY.md
│ │ ├── client/
│ │ │ ├── detailed_error_explanations.md
│ │ │ ├── identity_and_auth.md
│ │ │ ├── orchestrator.md
│ │ │ └── overview.md
│ │ ├── contributing/
│ │ │ ├── overview.md
│ │ │ └── writing_and_debugging_a_low-level_feature_that_relies_on_HTTP.md
│ │ ├── faq.md
│ │ ├── overview.md
│ │ ├── rfcs/
│ │ │ ├── overview.md
│ │ │ ├── rfc0001_shared_config.md
│ │ │ ├── rfc0002_http_versions.md
│ │ │ ├── rfc0003_presigning_api.md
│ │ │ ├── rfc0004_retry_behavior.md
│ │ │ ├── rfc0005_service_generation.md
│ │ │ ├── rfc0006_service_specific_middleware.md
│ │ │ ├── rfc0007_split_release_process.md
│ │ │ ├── rfc0008_paginators.md
│ │ │ ├── rfc0009_example_consolidation.md
│ │ │ ├── rfc0010_waiters.md
│ │ │ ├── rfc0011_crates_io_alpha_publishing.md
│ │ │ ├── rfc0012_independent_crate_versioning.md
│ │ │ ├── rfc0013_body_callback_apis.md
│ │ │ ├── rfc0014_timeout_config.md
│ │ │ ├── rfc0015_using_features_responsibly.md
│ │ │ ├── rfc0016_flexible_checksum_support.md
│ │ │ ├── rfc0017_customizable_client_operations.md
│ │ │ ├── rfc0018_logging_sensitive.md
│ │ │ ├── rfc0019_event_streams_errors.md
│ │ │ ├── rfc0020_service_builder.md
│ │ │ ├── rfc0021_dependency_versions.md
│ │ │ ├── rfc0022_error_context_and_compatibility.md
│ │ │ ├── rfc0023_refine_builder.md
│ │ │ ├── rfc0024_request_id.md
│ │ │ ├── rfc0025_constraint_traits.md
│ │ │ ├── rfc0026_client_crate_organization.md
│ │ │ ├── rfc0027_endpoints_20.md
│ │ │ ├── rfc0028_sdk_credential_cache_type_safety.md
│ │ │ ├── rfc0029_new_home_for_cred_types.md
│ │ │ ├── rfc0030_serialization_and_deserialization.md
│ │ │ ├── rfc0031_providing_fallback_credentials_on_timeout.md
│ │ │ ├── rfc0032_better_constraint_violations.md
│ │ │ ├── rfc0033_improve_sdk_request_id_access.md
│ │ │ ├── rfc0034_smithy_orchestrator.md
│ │ │ ├── rfc0035_collection_defaults.md
│ │ │ ├── rfc0036_http_dep_elimination.md
│ │ │ ├── rfc0037_http_wrapper.md
│ │ │ ├── rfc0038_retry_classifier_customization.md
│ │ │ ├── rfc0039_forward_compatible_errors.md
│ │ │ ├── rfc0040_behavior_versions.md
│ │ │ ├── rfc0041_improve_client_error_ergonomics.md
│ │ │ ├── rfc0042_file_per_change_changelog.md
│ │ │ ├── rfc0043_identity_cache_partitions.md
│ │ │ ├── rfc0044_env_defined_service_config.md
│ │ │ ├── rfc0045_configurable_serde.md
│ │ │ ├── rfc0046_server_request_metrics.md
│ │ │ └── rfc_template.md
│ │ ├── server/
│ │ │ ├── anatomy.md
│ │ │ ├── code_generation.md
│ │ │ ├── from_parts.md
│ │ │ ├── instrumentation.md
│ │ │ ├── middleware.md
│ │ │ ├── overview.md
│ │ │ └── validation_exceptions.md
│ │ ├── smithy/
│ │ │ ├── aggregate_shapes.md
│ │ │ ├── backwards-compat.md
│ │ │ ├── event_streams.md
│ │ │ ├── overview.md
│ │ │ ├── recursive_shapes.md
│ │ │ └── simple_shapes.md
│ │ └── tenets.md
│ └── static/
│ └── mermaid-init.js
├── examples/
│ ├── .gitignore
│ ├── BENCHMARKS.md
│ ├── Cargo.toml
│ ├── Makefile
│ ├── README.md
│ ├── legacy/
│ │ ├── .gitignore
│ │ ├── Cargo.toml
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── pokemon-service/
│ │ │ ├── Cargo.toml
│ │ │ ├── src/
│ │ │ │ ├── authz.rs
│ │ │ │ ├── lib.rs
│ │ │ │ ├── main.rs
│ │ │ │ └── plugin.rs
│ │ │ └── tests/
│ │ │ ├── common/
│ │ │ │ └── mod.rs
│ │ │ ├── event_streaming.rs
│ │ │ └── simple.rs
│ │ ├── pokemon-service-client-usage/
│ │ │ ├── Cargo.toml
│ │ │ ├── README.md
│ │ │ ├── examples/
│ │ │ │ ├── client-connector.rs
│ │ │ │ ├── custom-header-using-interceptor.rs
│ │ │ │ ├── custom-header.rs
│ │ │ │ ├── endpoint-resolver.rs
│ │ │ │ ├── handling-errors.rs
│ │ │ │ ├── mock-request.rs
│ │ │ │ ├── response-header-interceptor.rs
│ │ │ │ ├── retry-classifier.rs
│ │ │ │ ├── retry-customize.rs
│ │ │ │ ├── simple-client.rs
│ │ │ │ ├── timeout-config.rs
│ │ │ │ ├── trace-serialize.rs
│ │ │ │ └── use-config-bag.rs
│ │ │ └── src/
│ │ │ └── lib.rs
│ │ ├── pokemon-service-common/
│ │ │ ├── Cargo.toml
│ │ │ ├── src/
│ │ │ │ └── lib.rs
│ │ │ └── tests/
│ │ │ └── plugins_execution_order.rs
│ │ ├── pokemon-service-lambda/
│ │ │ ├── Cargo.toml
│ │ │ ├── src/
│ │ │ │ ├── lib.rs
│ │ │ │ └── main.rs
│ │ │ └── tests/
│ │ │ └── fixtures/
│ │ │ └── example-apigw-request.json
│ │ └── pokemon-service-tls/
│ │ ├── Cargo.toml
│ │ ├── src/
│ │ │ ├── lib.rs
│ │ │ └── main.rs
│ │ └── tests/
│ │ ├── common/
│ │ │ └── mod.rs
│ │ ├── custom_connectors.rs
│ │ └── testdata/
│ │ ├── localhost.crt
│ │ └── localhost.key
│ ├── pokemon-service/
│ │ ├── Cargo.toml
│ │ ├── cargo
│ │ ├── src/
│ │ │ ├── authz.rs
│ │ │ ├── lib.rs
│ │ │ ├── main.rs
│ │ │ └── plugin.rs
│ │ └── tests/
│ │ ├── common/
│ │ │ └── mod.rs
│ │ ├── event_streaming.rs
│ │ ├── metrics_test.rs
│ │ ├── simple.rs
│ │ └── snapshots/
│ │ └── metrics_test__metrics_content_via_tcp.snap
│ ├── pokemon-service-client-usage/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ ├── examples/
│ │ │ ├── client-connector.rs
│ │ │ ├── custom-header-using-interceptor.rs
│ │ │ ├── custom-header.rs
│ │ │ ├── endpoint-resolver.rs
│ │ │ ├── handling-errors.rs
│ │ │ ├── mock-request.rs
│ │ │ ├── response-header-interceptor.rs
│ │ │ ├── retry-classifier.rs
│ │ │ ├── retry-customize.rs
│ │ │ ├── simple-client.rs
│ │ │ ├── timeout-config.rs
│ │ │ ├── trace-serialize.rs
│ │ │ └── use-config-bag.rs
│ │ └── src/
│ │ └── lib.rs
│ ├── pokemon-service-common/
│ │ ├── Cargo.toml
│ │ ├── src/
│ │ │ ├── lib.rs
│ │ │ └── metrics.rs
│ │ └── tests/
│ │ └── plugins_execution_order.rs
│ ├── pokemon-service-lambda/
│ │ ├── Cargo.toml
│ │ ├── src/
│ │ │ ├── lib.rs
│ │ │ └── main.rs
│ │ └── tests/
│ │ └── fixtures/
│ │ └── example-apigw-request.json
│ ├── pokemon-service-tls/
│ │ ├── Cargo.toml
│ │ ├── src/
│ │ │ ├── lib.rs
│ │ │ └── main.rs
│ │ └── tests/
│ │ ├── common/
│ │ │ └── mod.rs
│ │ ├── custom_connectors.rs
│ │ └── testdata/
│ │ ├── localhost.crt
│ │ └── localhost.key
│ └── python/
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── Makefile
│ ├── README.md
│ ├── mypy.ini
│ ├── pokemon-service-test/
│ │ ├── Cargo.toml
│ │ └── tests/
│ │ ├── helpers.rs
│ │ ├── simple_integration_test.rs
│ │ └── testdata/
│ │ ├── localhost.crt
│ │ └── localhost.key
│ └── pokemon_service.py
├── fuzzgen/
│ ├── build.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── kotlin/
│ │ │ └── software/
│ │ │ └── amazon/
│ │ │ └── smithy/
│ │ │ └── rust/
│ │ │ └── codegen/
│ │ │ └── fuzz/
│ │ │ ├── FuzzHarnessBuildPlugin.kt
│ │ │ └── FuzzTargetGenerator.kt
│ │ └── resources/
│ │ └── META-INF/
│ │ └── services/
│ │ └── software.amazon.smithy.build.SmithyBuildPlugin
│ └── test/
│ └── kotlin/
│ └── software/
│ └── amazon/
│ └── smithy/
│ └── rust/
│ └── codegen/
│ └── fuzz/
│ └── FuzzHarnessBuildPluginTest.kt
├── gradle/
│ ├── libs.versions.toml
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── rust-runtime/
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── aws-smithy-async/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── external-types.toml
│ │ └── src/
│ │ ├── future/
│ │ │ ├── mod.rs
│ │ │ ├── never.rs
│ │ │ ├── now_or_later.rs
│ │ │ ├── pagination_stream/
│ │ │ │ ├── collect.rs
│ │ │ │ └── fn_stream.rs
│ │ │ ├── pagination_stream.rs
│ │ │ ├── rendezvous.rs
│ │ │ └── timeout.rs
│ │ ├── lib.rs
│ │ ├── rt/
│ │ │ ├── mod.rs
│ │ │ └── sleep.rs
│ │ ├── test_util/
│ │ │ ├── controlled_sleep.rs
│ │ │ ├── instant_sleep.rs
│ │ │ ├── manual_time.rs
│ │ │ └── tick_advance_sleep.rs
│ │ ├── test_util.rs
│ │ └── time.rs
│ ├── aws-smithy-cbor/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── benches/
│ │ │ ├── blob.rs
│ │ │ └── string.rs
│ │ └── src/
│ │ ├── data.rs
│ │ ├── decode.rs
│ │ ├── encode.rs
│ │ └── lib.rs
│ ├── aws-smithy-checksums/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── external-types.toml
│ │ └── src/
│ │ ├── body/
│ │ │ ├── cache.rs
│ │ │ ├── calculate.rs
│ │ │ └── validate.rs
│ │ ├── body.rs
│ │ ├── error.rs
│ │ ├── http.rs
│ │ └── lib.rs
│ ├── aws-smithy-compression/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── external-types.toml
│ │ ├── src/
│ │ │ ├── body.rs
│ │ │ ├── gzip.rs
│ │ │ ├── http.rs
│ │ │ └── lib.rs
│ │ └── test-data/
│ │ └── gettysburg_address.txt
│ ├── aws-smithy-dns/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── src/
│ │ │ ├── hickory.rs
│ │ │ └── lib.rs
│ │ └── tests/
│ │ └── hickory.rs
│ ├── aws-smithy-eventstream/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── benches/
│ │ │ └── write_message_performance.rs
│ │ ├── external-types.toml
│ │ ├── fuzz/
│ │ │ ├── .gitignore
│ │ │ ├── Cargo.toml
│ │ │ └── fuzz_targets/
│ │ │ ├── corrected_prelude_crc.rs
│ │ │ ├── mutated_headers.rs
│ │ │ ├── prelude.rs
│ │ │ ├── raw_bytes.rs
│ │ │ └── round_trip.rs
│ │ ├── src/
│ │ │ ├── arbitrary.rs
│ │ │ ├── buf/
│ │ │ │ ├── count.rs
│ │ │ │ └── crc.rs
│ │ │ ├── buf.rs
│ │ │ ├── error.rs
│ │ │ ├── frame.rs
│ │ │ ├── lib.rs
│ │ │ ├── message_size_hint.rs
│ │ │ ├── smithy.rs
│ │ │ └── test_util.rs
│ │ └── test_data/
│ │ ├── invalid_header_name_length
│ │ ├── invalid_header_name_length_too_long
│ │ ├── invalid_header_string_length_cut_off
│ │ ├── invalid_header_string_value_length
│ │ ├── invalid_header_value_type
│ │ ├── invalid_headers_length
│ │ ├── invalid_message_checksum
│ │ ├── invalid_prelude_checksum
│ │ ├── valid_empty_payload
│ │ ├── valid_no_headers
│ │ └── valid_with_all_headers_and_payload
│ ├── aws-smithy-experimental/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── src/
│ │ └── lib.rs
│ ├── aws-smithy-fuzz/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── src/
│ │ │ ├── lib.rs
│ │ │ ├── main.rs
│ │ │ └── types.rs
│ │ └── templates/
│ │ ├── smithy-build-fuzzer.jinja2
│ │ └── smithy-build-targetcrate.jinja2
│ ├── aws-smithy-http/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── external-types.toml
│ │ ├── fuzz/
│ │ │ ├── .gitignore
│ │ │ ├── Cargo.toml
│ │ │ └── fuzz_targets/
│ │ │ └── read_many_from_str.rs
│ │ ├── proptest-regressions/
│ │ │ ├── event_stream/
│ │ │ │ └── receiver.txt
│ │ │ ├── label.txt
│ │ │ └── query.txt
│ │ └── src/
│ │ ├── endpoint/
│ │ │ └── error.rs
│ │ ├── endpoint.rs
│ │ ├── event_stream/
│ │ │ ├── receiver.rs
│ │ │ └── sender.rs
│ │ ├── event_stream.rs
│ │ ├── futures_stream_adapter.rs
│ │ ├── header.rs
│ │ ├── label.rs
│ │ ├── lib.rs
│ │ ├── operation.rs
│ │ ├── query.rs
│ │ ├── query_writer.rs
│ │ └── urlencode.rs
│ ├── aws-smithy-http-client/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── examples/
│ │ │ ├── client-aws-lc.rs
│ │ │ ├── client-ring.rs
│ │ │ ├── client-s2n-tls.rs
│ │ │ └── custom-dns.rs
│ │ ├── external-types.toml
│ │ ├── src/
│ │ │ ├── client/
│ │ │ │ ├── connect.rs
│ │ │ │ ├── dns.rs
│ │ │ │ ├── proxy.rs
│ │ │ │ ├── timeout.rs
│ │ │ │ ├── tls/
│ │ │ │ │ ├── rustls_provider.rs
│ │ │ │ │ └── s2n_tls_provider.rs
│ │ │ │ └── tls.rs
│ │ │ ├── client.rs
│ │ │ ├── error.rs
│ │ │ ├── hyper_legacy.rs
│ │ │ ├── lib.rs
│ │ │ ├── test_util/
│ │ │ │ ├── body.rs
│ │ │ │ ├── capture_request.rs
│ │ │ │ ├── dvr/
│ │ │ │ │ ├── record.rs
│ │ │ │ │ └── replay.rs
│ │ │ │ ├── dvr.rs
│ │ │ │ ├── infallible.rs
│ │ │ │ ├── legacy_infallible.rs
│ │ │ │ ├── never.rs
│ │ │ │ ├── replay.rs
│ │ │ │ └── wire.rs
│ │ │ └── test_util.rs
│ │ ├── test-data/
│ │ │ └── example.com.json
│ │ └── tests/
│ │ ├── openssl.cnf
│ │ ├── proxy_tests.rs
│ │ ├── regen-certificates.sh
│ │ ├── server.pem
│ │ ├── server.rsa
│ │ ├── smoke_test_clients.rs
│ │ └── tls.rs
│ ├── aws-smithy-http-server/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── examples/
│ │ │ ├── basic_server.rs
│ │ │ ├── custom_accept_loop.rs
│ │ │ └── request_id.rs
│ │ ├── rustfmt.toml
│ │ ├── src/
│ │ │ ├── body.rs
│ │ │ ├── error.rs
│ │ │ ├── extension.rs
│ │ │ ├── instrumentation/
│ │ │ │ ├── mod.rs
│ │ │ │ ├── plugin.rs
│ │ │ │ ├── sensitivity/
│ │ │ │ │ ├── headers.rs
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ ├── request.rs
│ │ │ │ │ ├── response.rs
│ │ │ │ │ ├── sensitive.rs
│ │ │ │ │ └── uri/
│ │ │ │ │ ├── label.rs
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ └── query.rs
│ │ │ │ └── service.rs
│ │ │ ├── layer/
│ │ │ │ ├── alb_health_check.rs
│ │ │ │ └── mod.rs
│ │ │ ├── lib.rs
│ │ │ ├── macros.rs
│ │ │ ├── operation/
│ │ │ │ ├── handler.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── operation_service.rs
│ │ │ │ ├── shape.rs
│ │ │ │ └── upgrade.rs
│ │ │ ├── plugin/
│ │ │ │ ├── closure.rs
│ │ │ │ ├── either.rs
│ │ │ │ ├── filter.rs
│ │ │ │ ├── http_plugins.rs
│ │ │ │ ├── identity.rs
│ │ │ │ ├── layer.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── model_plugins.rs
│ │ │ │ ├── scoped.rs
│ │ │ │ └── stack.rs
│ │ │ ├── protocol/
│ │ │ │ ├── aws_json/
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ ├── rejection.rs
│ │ │ │ │ ├── router.rs
│ │ │ │ │ └── runtime_error.rs
│ │ │ │ ├── aws_json_10/
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ └── router.rs
│ │ │ │ ├── aws_json_11/
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ └── router.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── rest/
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ └── router.rs
│ │ │ │ ├── rest_json_1/
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ ├── rejection.rs
│ │ │ │ │ ├── router.rs
│ │ │ │ │ └── runtime_error.rs
│ │ │ │ ├── rest_xml/
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ ├── rejection.rs
│ │ │ │ │ ├── router.rs
│ │ │ │ │ └── runtime_error.rs
│ │ │ │ └── rpc_v2_cbor/
│ │ │ │ ├── mod.rs
│ │ │ │ ├── rejection.rs
│ │ │ │ ├── router.rs
│ │ │ │ └── runtime_error.rs
│ │ │ ├── rejection.rs
│ │ │ ├── request/
│ │ │ │ ├── connect_info.rs
│ │ │ │ ├── extension.rs
│ │ │ │ ├── lambda.rs
│ │ │ │ ├── mod.rs
│ │ │ │ └── request_id.rs
│ │ │ ├── response.rs
│ │ │ ├── routing/
│ │ │ │ ├── into_make_service.rs
│ │ │ │ ├── into_make_service_with_connect_info.rs
│ │ │ │ ├── lambda_handler.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── request_spec.rs
│ │ │ │ ├── route.rs
│ │ │ │ └── tiny_map.rs
│ │ │ ├── runtime_error.rs
│ │ │ ├── serve/
│ │ │ │ ├── listener.rs
│ │ │ │ └── mod.rs
│ │ │ ├── service.rs
│ │ │ ├── shape_id.rs
│ │ │ └── test_helpers.rs
│ │ └── tests/
│ │ ├── graceful_shutdown_test.rs
│ │ └── serve_integration_test.rs
│ ├── aws-smithy-http-server-metrics/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── src/
│ │ ├── default/
│ │ │ └── service_counter.rs
│ │ ├── default.rs
│ │ ├── layer/
│ │ │ └── builder.rs
│ │ ├── layer.rs
│ │ ├── lib.rs
│ │ ├── operation.rs
│ │ ├── plugin.rs
│ │ ├── service.rs
│ │ ├── traits.rs
│ │ └── types.rs
│ ├── aws-smithy-http-server-metrics-macro/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── src/
│ │ ├── lib.rs
│ │ └── macro_impl.rs
│ ├── aws-smithy-http-server-python/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── src/
│ │ │ ├── context/
│ │ │ │ ├── lambda.rs
│ │ │ │ ├── layer.rs
│ │ │ │ └── testing.rs
│ │ │ ├── context.rs
│ │ │ ├── error.rs
│ │ │ ├── lambda.rs
│ │ │ ├── lib.rs
│ │ │ ├── logging.rs
│ │ │ ├── middleware/
│ │ │ │ ├── error.rs
│ │ │ │ ├── handler.rs
│ │ │ │ ├── header_map.rs
│ │ │ │ ├── layer.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── pytests/
│ │ │ │ │ ├── harness.rs
│ │ │ │ │ ├── layer.rs
│ │ │ │ │ ├── request.rs
│ │ │ │ │ └── response.rs
│ │ │ │ ├── request.rs
│ │ │ │ └── response.rs
│ │ │ ├── pytests/
│ │ │ │ ├── bytestream.rs
│ │ │ │ └── harness.rs
│ │ │ ├── server.rs
│ │ │ ├── socket.rs
│ │ │ ├── tls/
│ │ │ │ └── listener.rs
│ │ │ ├── tls.rs
│ │ │ ├── types.rs
│ │ │ ├── util/
│ │ │ │ ├── collection.rs
│ │ │ │ └── error.rs
│ │ │ └── util.rs
│ │ ├── stubgen.py
│ │ ├── stubgen.sh
│ │ └── stubgen_test.py
│ ├── aws-smithy-http-server-typescript/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── examples/
│ │ │ ├── .gitignore
│ │ │ ├── Cargo.toml
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ └── pokemon-service.ts
│ │ └── src/
│ │ └── lib.rs
│ ├── aws-smithy-json/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── TESTING.md
│ │ ├── external-types.toml
│ │ ├── fuzz/
│ │ │ ├── .gitignore
│ │ │ ├── Cargo.toml
│ │ │ ├── fuzz_targets/
│ │ │ │ ├── common.rs
│ │ │ │ ├── json_deserialize.rs
│ │ │ │ └── json_deserialize_corpus_cov.rs
│ │ │ └── show-corpus-coverage.sh
│ │ ├── proptest-regressions/
│ │ │ ├── deserialize/
│ │ │ │ └── token.txt
│ │ │ └── deserialize.txt
│ │ └── src/
│ │ ├── deserialize/
│ │ │ ├── error.rs
│ │ │ └── token.rs
│ │ ├── deserialize.rs
│ │ ├── escape.rs
│ │ ├── lib.rs
│ │ └── serialize.rs
│ ├── aws-smithy-legacy-http/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── external-types.toml
│ │ ├── fuzz/
│ │ │ ├── .gitignore
│ │ │ ├── Cargo.toml
│ │ │ └── fuzz_targets/
│ │ │ └── read_many_from_str.rs
│ │ ├── proptest-regressions/
│ │ │ ├── label.txt
│ │ │ └── query.txt
│ │ └── src/
│ │ ├── endpoint/
│ │ │ └── error.rs
│ │ ├── endpoint.rs
│ │ ├── event_stream/
│ │ │ ├── receiver.rs
│ │ │ └── sender.rs
│ │ ├── event_stream.rs
│ │ ├── futures_stream_adapter.rs
│ │ ├── header.rs
│ │ ├── label.rs
│ │ ├── lib.rs
│ │ ├── operation.rs
│ │ ├── query.rs
│ │ ├── query_writer.rs
│ │ └── urlencode.rs
│ ├── aws-smithy-legacy-http-server/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── rustfmt.toml
│ │ └── src/
│ │ ├── body.rs
│ │ ├── error.rs
│ │ ├── extension.rs
│ │ ├── instrumentation/
│ │ │ ├── mod.rs
│ │ │ ├── plugin.rs
│ │ │ ├── sensitivity/
│ │ │ │ ├── headers.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── request.rs
│ │ │ │ ├── response.rs
│ │ │ │ ├── sensitive.rs
│ │ │ │ └── uri/
│ │ │ │ ├── label.rs
│ │ │ │ ├── mod.rs
│ │ │ │ └── query.rs
│ │ │ └── service.rs
│ │ ├── layer/
│ │ │ ├── alb_health_check.rs
│ │ │ └── mod.rs
│ │ ├── lib.rs
│ │ ├── macros.rs
│ │ ├── operation/
│ │ │ ├── handler.rs
│ │ │ ├── mod.rs
│ │ │ ├── operation_service.rs
│ │ │ ├── shape.rs
│ │ │ └── upgrade.rs
│ │ ├── plugin/
│ │ │ ├── closure.rs
│ │ │ ├── either.rs
│ │ │ ├── filter.rs
│ │ │ ├── http_plugins.rs
│ │ │ ├── identity.rs
│ │ │ ├── layer.rs
│ │ │ ├── mod.rs
│ │ │ ├── model_plugins.rs
│ │ │ ├── scoped.rs
│ │ │ └── stack.rs
│ │ ├── protocol/
│ │ │ ├── aws_json/
│ │ │ │ ├── mod.rs
│ │ │ │ ├── rejection.rs
│ │ │ │ ├── router.rs
│ │ │ │ └── runtime_error.rs
│ │ │ ├── aws_json_10/
│ │ │ │ ├── mod.rs
│ │ │ │ └── router.rs
│ │ │ ├── aws_json_11/
│ │ │ │ ├── mod.rs
│ │ │ │ └── router.rs
│ │ │ ├── mod.rs
│ │ │ ├── rest/
│ │ │ │ ├── mod.rs
│ │ │ │ └── router.rs
│ │ │ ├── rest_json_1/
│ │ │ │ ├── mod.rs
│ │ │ │ ├── rejection.rs
│ │ │ │ ├── router.rs
│ │ │ │ └── runtime_error.rs
│ │ │ ├── rest_xml/
│ │ │ │ ├── mod.rs
│ │ │ │ ├── rejection.rs
│ │ │ │ ├── router.rs
│ │ │ │ └── runtime_error.rs
│ │ │ └── rpc_v2_cbor/
│ │ │ ├── mod.rs
│ │ │ ├── rejection.rs
│ │ │ ├── router.rs
│ │ │ └── runtime_error.rs
│ │ ├── rejection.rs
│ │ ├── request/
│ │ │ ├── connect_info.rs
│ │ │ ├── extension.rs
│ │ │ ├── lambda.rs
│ │ │ ├── mod.rs
│ │ │ └── request_id.rs
│ │ ├── response.rs
│ │ ├── routing/
│ │ │ ├── into_make_service.rs
│ │ │ ├── into_make_service_with_connect_info.rs
│ │ │ ├── lambda_handler.rs
│ │ │ ├── mod.rs
│ │ │ ├── request_spec.rs
│ │ │ ├── route.rs
│ │ │ └── tiny_map.rs
│ │ ├── runtime_error.rs
│ │ ├── service.rs
│ │ ├── shape_id.rs
│ │ └── test_helpers.rs
│ ├── aws-smithy-mocks/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── src/
│ │ │ ├── interceptor.rs
│ │ │ ├── lib.rs
│ │ │ └── rule.rs
│ │ └── tests/
│ │ └── macros.rs
│ ├── aws-smithy-observability/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── external-types.toml
│ │ └── src/
│ │ ├── attributes.rs
│ │ ├── context.rs
│ │ ├── error.rs
│ │ ├── global.rs
│ │ ├── instruments.rs
│ │ ├── lib.rs
│ │ ├── meter.rs
│ │ ├── noop.rs
│ │ └── provider.rs
│ ├── aws-smithy-observability-otel/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── benches/
│ │ │ ├── async_instruments.rs
│ │ │ └── sync_instruments.rs
│ │ ├── external-types.toml
│ │ └── src/
│ │ ├── attributes.rs
│ │ ├── lib.rs
│ │ └── meter.rs
│ ├── aws-smithy-protocol-test/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── src/
│ │ ├── lib.rs
│ │ ├── urlencoded.rs
│ │ └── xml.rs
│ ├── aws-smithy-query/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── external-types.toml
│ │ └── src/
│ │ └── lib.rs
│ ├── aws-smithy-runtime/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── external-types.toml
│ │ ├── src/
│ │ │ ├── client/
│ │ │ │ ├── auth/
│ │ │ │ │ ├── http.rs
│ │ │ │ │ └── no_auth.rs
│ │ │ │ ├── auth.rs
│ │ │ │ ├── config_override.rs
│ │ │ │ ├── defaults.rs
│ │ │ │ ├── dns.rs
│ │ │ │ ├── endpoint.rs
│ │ │ │ ├── http/
│ │ │ │ │ ├── body/
│ │ │ │ │ │ ├── content_length_enforcement.rs
│ │ │ │ │ │ ├── minimum_throughput/
│ │ │ │ │ │ │ ├── http_body_0_4_x.rs
│ │ │ │ │ │ │ ├── http_body_1_x.rs
│ │ │ │ │ │ │ ├── options.rs
│ │ │ │ │ │ │ └── throughput.rs
│ │ │ │ │ │ └── minimum_throughput.rs
│ │ │ │ │ ├── body.rs
│ │ │ │ │ └── connection_poisoning.rs
│ │ │ │ ├── http.rs
│ │ │ │ ├── identity/
│ │ │ │ │ ├── cache/
│ │ │ │ │ │ └── lazy.rs
│ │ │ │ │ ├── cache.rs
│ │ │ │ │ └── no_auth.rs
│ │ │ │ ├── identity.rs
│ │ │ │ ├── interceptors.rs
│ │ │ │ ├── metrics.rs
│ │ │ │ ├── orchestrator/
│ │ │ │ │ ├── auth.rs
│ │ │ │ │ ├── endpoints.rs
│ │ │ │ │ ├── http.rs
│ │ │ │ │ └── operation.rs
│ │ │ │ ├── orchestrator.rs
│ │ │ │ ├── retries/
│ │ │ │ │ ├── classifiers.rs
│ │ │ │ │ ├── client_rate_limiter.rs
│ │ │ │ │ ├── strategy/
│ │ │ │ │ │ ├── never.rs
│ │ │ │ │ │ └── standard.rs
│ │ │ │ │ ├── strategy.rs
│ │ │ │ │ └── token_bucket.rs
│ │ │ │ ├── retries.rs
│ │ │ │ ├── sdk_feature.rs
│ │ │ │ ├── stalled_stream_protection.rs
│ │ │ │ ├── test_util/
│ │ │ │ │ ├── deserializer.rs
│ │ │ │ │ └── serializer.rs
│ │ │ │ ├── test_util.rs
│ │ │ │ ├── timeout.rs
│ │ │ │ ├── waiters/
│ │ │ │ │ └── backoff.rs
│ │ │ │ └── waiters.rs
│ │ │ ├── client.rs
│ │ │ ├── expiring_cache.rs
│ │ │ ├── lib.rs
│ │ │ ├── static_partition_map.rs
│ │ │ ├── test_util/
│ │ │ │ ├── assertions.rs
│ │ │ │ └── capture_test_logs.rs
│ │ │ └── test_util.rs
│ │ └── tests/
│ │ ├── reconnect_on_transient_error.rs
│ │ ├── retries.rs
│ │ ├── stalled_stream_common.rs
│ │ ├── stalled_stream_download.rs
│ │ ├── stalled_stream_performance.rs
│ │ └── stalled_stream_upload.rs
│ ├── aws-smithy-runtime-api/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── external-types-no-http.toml
│ │ ├── external-types.toml
│ │ ├── rustdoc/
│ │ │ ├── validate_base_client_config.md
│ │ │ └── validate_final_config.md
│ │ ├── src/
│ │ │ ├── box_error.rs
│ │ │ ├── client/
│ │ │ │ ├── auth/
│ │ │ │ │ ├── http.rs
│ │ │ │ │ └── static_resolver.rs
│ │ │ │ ├── auth.rs
│ │ │ │ ├── behavior_version.rs
│ │ │ │ ├── connection.rs
│ │ │ │ ├── connector_metadata.rs
│ │ │ │ ├── dns.rs
│ │ │ │ ├── endpoint.rs
│ │ │ │ ├── http.rs
│ │ │ │ ├── identity/
│ │ │ │ │ └── http.rs
│ │ │ │ ├── identity.rs
│ │ │ │ ├── interceptors/
│ │ │ │ │ ├── context/
│ │ │ │ │ │ ├── phase.rs
│ │ │ │ │ │ └── wrappers.rs
│ │ │ │ │ ├── context.rs
│ │ │ │ │ └── error.rs
│ │ │ │ ├── interceptors.rs
│ │ │ │ ├── orchestrator.rs
│ │ │ │ ├── result.rs
│ │ │ │ ├── retries/
│ │ │ │ │ └── classifiers.rs
│ │ │ │ ├── retries.rs
│ │ │ │ ├── runtime_components.rs
│ │ │ │ ├── runtime_plugin.rs
│ │ │ │ ├── ser_de.rs
│ │ │ │ ├── stalled_stream_protection.rs
│ │ │ │ └── waiters.rs
│ │ │ ├── client.rs
│ │ │ ├── http/
│ │ │ │ ├── error.rs
│ │ │ │ ├── extensions.rs
│ │ │ │ ├── headers.rs
│ │ │ │ ├── request.rs
│ │ │ │ └── response.rs
│ │ │ ├── http.rs
│ │ │ ├── lib.rs
│ │ │ └── shared.rs
│ │ └── tests/
│ │ ├── dyn_dispatch_hint.rs
│ │ └── permanent_interceptor.rs
│ ├── aws-smithy-runtime-api-macros/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── src/
│ │ └── lib.rs
│ ├── aws-smithy-types/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── additional-ci
│ │ ├── benches/
│ │ │ └── base64.rs
│ │ ├── external-types.toml
│ │ ├── fuzz/
│ │ │ ├── .gitignore
│ │ │ ├── Cargo.toml
│ │ │ └── fuzz_targets/
│ │ │ ├── parse_date_time.rs
│ │ │ ├── parse_epoch_seconds.rs
│ │ │ ├── parse_http_date.rs
│ │ │ ├── read_date_time.rs
│ │ │ └── read_http_date.rs
│ │ ├── proptest-regressions/
│ │ │ └── instant/
│ │ │ └── format.txt
│ │ ├── src/
│ │ │ ├── base64.rs
│ │ │ ├── big_number.rs
│ │ │ ├── blob.rs
│ │ │ ├── body/
│ │ │ │ ├── http_body_0_4_x.rs
│ │ │ │ └── http_body_1_x.rs
│ │ │ ├── body.rs
│ │ │ ├── byte_stream/
│ │ │ │ ├── bytestream_util/
│ │ │ │ │ ├── http_body_0_4_x.rs
│ │ │ │ │ └── http_body_1_x.rs
│ │ │ │ ├── bytestream_util.rs
│ │ │ │ ├── error.rs
│ │ │ │ ├── http_body_0_4_x.rs
│ │ │ │ └── http_body_1_x.rs
│ │ │ ├── byte_stream.rs
│ │ │ ├── checksum_config.rs
│ │ │ ├── config_bag/
│ │ │ │ ├── storable.rs
│ │ │ │ └── typeid_map.rs
│ │ │ ├── config_bag.rs
│ │ │ ├── date_time/
│ │ │ │ ├── de.rs
│ │ │ │ ├── format.rs
│ │ │ │ ├── mod.rs
│ │ │ │ └── ser.rs
│ │ │ ├── document.rs
│ │ │ ├── endpoint.rs
│ │ │ ├── error/
│ │ │ │ ├── display.rs
│ │ │ │ ├── metadata.rs
│ │ │ │ └── operation.rs
│ │ │ ├── error.rs
│ │ │ ├── event_stream.rs
│ │ │ ├── lib.rs
│ │ │ ├── number.rs
│ │ │ ├── primitive.rs
│ │ │ ├── retry.rs
│ │ │ ├── str_bytes.rs
│ │ │ ├── timeout.rs
│ │ │ └── type_erasure.rs
│ │ └── test_data/
│ │ ├── date_time_format_test_suite.json
│ │ └── serialize_document.json
│ ├── aws-smithy-types-convert/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── external-types.toml
│ │ └── src/
│ │ ├── date_time.rs
│ │ ├── lib.rs
│ │ └── stream.rs
│ ├── aws-smithy-wasm/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── external-types.toml
│ │ └── src/
│ │ ├── lib.rs
│ │ └── wasi.rs
│ ├── aws-smithy-xml/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── external-types.toml
│ │ ├── src/
│ │ │ ├── decode.rs
│ │ │ ├── encode.rs
│ │ │ ├── escape.rs
│ │ │ ├── lib.rs
│ │ │ └── unescape.rs
│ │ └── tests/
│ │ ├── handwritten_parsers.rs
│ │ └── handwritten_serializers.rs
│ ├── build.gradle.kts
│ ├── clippy.toml
│ └── inlineable/
│ ├── Cargo.toml
│ ├── LICENSE
│ ├── README.md
│ ├── external-types.toml
│ └── src/
│ ├── auth_plugin.rs
│ ├── aws_query_compatible_errors.rs
│ ├── cbor_errors.rs
│ ├── client_http_checksum_required.rs
│ ├── client_idempotency_token.rs
│ ├── client_request_compression.rs
│ ├── constrained.rs
│ ├── ec2_query_errors.rs
│ ├── endpoint_lib/
│ │ ├── arn.rs
│ │ ├── bdd_interpreter.rs
│ │ ├── coalesce.rs
│ │ ├── diagnostic.rs
│ │ ├── host.rs
│ │ ├── ite.rs
│ │ ├── parse_url.rs
│ │ ├── partition.rs
│ │ ├── s3.rs
│ │ ├── split.rs
│ │ ├── substring.rs
│ │ └── uri_encode.rs
│ ├── endpoint_lib.rs
│ ├── event_receiver.rs
│ ├── http_checksum_required.rs
│ ├── idempotency_token.rs
│ ├── json_errors.rs
│ ├── lib.rs
│ ├── rest_xml_unwrapped_errors.rs
│ ├── rest_xml_wrapped_errors.rs
│ ├── sdk_feature_tracker.rs
│ └── serialization_settings.rs
├── rust-toolchain.toml
├── settings.gradle.kts
└── tools/
├── .cargo/
│ └── config.toml
├── __init__.py
├── ci-build/
│ ├── .dockerignore
│ ├── Dockerfile
│ ├── README.md
│ ├── add-local-user.dockerfile
│ ├── build.docker-compose.yml
│ ├── changelogger/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ ├── smithy-rs-maintainers.txt
│ │ ├── src/
│ │ │ ├── entry.rs
│ │ │ ├── lib.rs
│ │ │ ├── ls.rs
│ │ │ ├── main.rs
│ │ │ ├── new.rs
│ │ │ ├── render.rs
│ │ │ └── split.rs
│ │ └── tests/
│ │ └── e2e_test.rs
│ ├── ci-action
│ ├── ci-create-workspace
│ ├── crate-hasher/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ ├── src/
│ │ │ ├── file_list.rs
│ │ │ ├── lib.rs
│ │ │ └── main.rs
│ │ └── tests/
│ │ ├── aws-smithy-async-2022-04-08-entries.txt
│ │ └── test.rs
│ ├── difftags/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ └── src/
│ │ ├── difftags.css
│ │ ├── difftags.js
│ │ ├── html.rs
│ │ ├── main.rs
│ │ └── page.rs
│ ├── publisher/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ ├── fake_cargo/
│ │ │ ├── cargo_fails
│ │ │ ├── cargo_owner_list
│ │ │ ├── cargo_publish_already_published
│ │ │ ├── cargo_search_success
│ │ │ ├── cargo_success
│ │ │ └── cargo_yank_not_found
│ │ ├── src/
│ │ │ ├── cargo/
│ │ │ │ ├── add_owner.rs
│ │ │ │ ├── get_owners.rs
│ │ │ │ ├── publish.rs
│ │ │ │ ├── remove_owner.rs
│ │ │ │ └── yank.rs
│ │ │ ├── cargo.rs
│ │ │ ├── fs.rs
│ │ │ ├── lib.rs
│ │ │ ├── main.rs
│ │ │ ├── package.rs
│ │ │ ├── publish.rs
│ │ │ ├── sort.rs
│ │ │ ├── subcommand/
│ │ │ │ ├── claim_crate_names.rs
│ │ │ │ ├── fix_manifests/
│ │ │ │ │ └── validate.rs
│ │ │ │ ├── fix_manifests.rs
│ │ │ │ ├── generate_version_manifest.rs
│ │ │ │ ├── hydrate_readme.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── publish.rs
│ │ │ │ ├── tag_versions_manifest.rs
│ │ │ │ └── yank_release.rs
│ │ │ └── yank.rs
│ │ └── tests/
│ │ └── hydrate_readme_e2e_test.rs
│ ├── runtime-versioner/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ ├── src/
│ │ │ ├── command/
│ │ │ │ ├── audit.rs
│ │ │ │ └── patch.rs
│ │ │ ├── main.rs
│ │ │ ├── repo.rs
│ │ │ ├── tag.rs
│ │ │ └── util.rs
│ │ ├── test-common/
│ │ │ ├── Cargo.toml
│ │ │ └── src/
│ │ │ └── lib.rs
│ │ ├── test_data/
│ │ │ ├── .gitignore
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── already_published_version.toml
│ │ │ └── base_crates_io_index.toml
│ │ └── tests/
│ │ ├── test_audit.rs
│ │ └── test_previous_release_tag.rs
│ ├── sanity-test
│ ├── sdk-lints/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ └── src/
│ │ ├── anchor.rs
│ │ ├── changelog.rs
│ │ ├── copyright.rs
│ │ ├── lib_rs_attr.rs
│ │ ├── lint.rs
│ │ ├── lint_cargo_toml.rs
│ │ ├── main.rs
│ │ ├── readmes.rs
│ │ └── todos.rs
│ ├── sdk-lockfiles/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ ├── false-positives.txt
│ │ └── src/
│ │ ├── audit.rs
│ │ └── main.rs
│ ├── sdk-versioner/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ └── src/
│ │ └── main.rs
│ └── smithy-rs-tool-common/
│ ├── Cargo.toml
│ ├── README.md
│ ├── fake-cli/
│ │ ├── git-changed-files
│ │ ├── git-changed-files-empty
│ │ ├── git-clone
│ │ ├── git-commit
│ │ ├── git-commit-on-behalf
│ │ ├── git-create-branch
│ │ ├── git-current-branch-name
│ │ ├── git-delete-branch
│ │ ├── git-extract-commit-info
│ │ ├── git-get-head-revision
│ │ ├── git-reset-hard
│ │ ├── git-rev-list
│ │ ├── git-rev-list-path
│ │ ├── git-show
│ │ ├── git-squash-merge
│ │ ├── git-stage
│ │ ├── git-untracked-files
│ │ └── git-untracked-files-empty
│ └── src/
│ ├── changelog/
│ │ └── parser.rs
│ ├── changelog.rs
│ ├── ci.rs
│ ├── command.rs
│ ├── git.rs
│ ├── index.rs
│ ├── lib.rs
│ ├── macros.rs
│ ├── package.rs
│ ├── release_tag.rs
│ ├── retry.rs
│ ├── shell.rs
│ └── versions_manifest.rs
├── ci-cdk/
│ ├── .eslintrc.json
│ ├── .gitignore
│ ├── .npmignore
│ ├── .prettierrc
│ ├── LICENSE
│ ├── README.md
│ ├── bin/
│ │ ├── aws-sdk-rust/
│ │ │ ├── canary-only.ts
│ │ │ └── canary.ts
│ │ └── smithy-rs/
│ │ ├── canary-only.ts
│ │ └── ci-cdk.ts
│ ├── canary-lambda/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ └── src/
│ │ ├── benches/
│ │ │ ├── ec2_canary.rs
│ │ │ ├── mod.rs
│ │ │ ├── s3_canary.rs
│ │ │ └── sts_canary.rs
│ │ ├── canary.rs
│ │ ├── latest/
│ │ │ ├── paginator_canary.rs
│ │ │ ├── s3_canary.rs
│ │ │ ├── transcribe_canary.rs
│ │ │ └── wasm_canary.rs
│ │ ├── latest.rs
│ │ ├── main.rs
│ │ ├── release_2023_10_26/
│ │ │ ├── paginator_canary.rs
│ │ │ ├── s3_canary.rs
│ │ │ └── transcribe_canary.rs
│ │ └── release_2023_10_26.rs
│ ├── canary-runner/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── arch.rs
│ │ ├── bench.rs
│ │ ├── build_bundle.rs
│ │ ├── generate_matrix.rs
│ │ ├── main.rs
│ │ └── run.rs
│ ├── canary-wasm/
│ │ ├── .gitignore
│ │ ├── src/
│ │ │ └── lib.rs
│ │ └── wit/
│ │ └── component.wit
│ ├── cdk.json
│ ├── jest.config.js
│ ├── lib/
│ │ ├── canary-stack.ts
│ │ ├── constructs/
│ │ │ ├── cloudfront-s3-cdn.ts
│ │ │ └── github-oidc-role.ts
│ │ ├── oidc-provider-stack.ts
│ │ └── smithy-rs/
│ │ └── pull-request-cdn-stack.ts
│ ├── package.json
│ ├── test/
│ │ ├── constructs/
│ │ │ └── github-oidc-role.test.ts
│ │ └── oidc-provider-stack.test.ts
│ └── tsconfig.json
├── ci-resources/
│ └── tls-stub/
│ ├── Cargo.toml
│ ├── README.md
│ └── src/
│ └── main.rs
├── ci-scripts/
│ ├── additional-per-crate-checks.sh
│ ├── cargo-update-lockfiles
│ ├── check-aws-config
│ ├── check-aws-sdk-adhoc-tests
│ ├── check-aws-sdk-benchmarks
│ ├── check-aws-sdk-canary
│ ├── check-aws-sdk-cargo-deny
│ ├── check-aws-sdk-services
│ ├── check-aws-sdk-smoketest-docs-clippy-udeps
│ ├── check-aws-sdk-smoketest-unit-tests
│ ├── check-aws-sdk-standalone-integration-tests
│ ├── check-book
│ ├── check-client-codegen-integration-tests
│ ├── check-client-codegen-unit-tests
│ ├── check-codegen-version
│ ├── check-core-codegen-unit-tests
│ ├── check-deterministic-codegen
│ ├── check-fuzzgen
│ ├── check-only-aws-sdk-services
│ ├── check-rust-runtimes
│ ├── check-sdk-codegen-unit-tests
│ ├── check-semver
│ ├── check-semver-hazards
│ ├── check-serde-codegen-unit-tests
│ ├── check-server-codegen-integration-tests
│ ├── check-server-codegen-integration-tests-python
│ ├── check-server-codegen-unit-tests
│ ├── check-server-codegen-unit-tests-python
│ ├── check-server-e2e-test
│ ├── check-server-python-e2e-test
│ ├── check-style-and-lints
│ ├── check-tools
│ ├── codegen-diff/
│ │ ├── __init__.py
│ │ ├── check-deterministic-codegen.py
│ │ ├── codegen-diff-revisions.py
│ │ ├── diff_lib.py
│ │ └── semver-checks.py
│ ├── configure-tls/
│ │ ├── configure-badssl
│ │ ├── configure-badtls
│ │ ├── configure-trytls
│ │ ├── new-badssl-dockerfile
│ │ └── update-certs
│ ├── generate-aws-sdk
│ ├── generate-aws-sdk-for-canary
│ ├── generate-aws-sdk-smoketest
│ ├── generate-codegen-diff
│ ├── generate-doc-preview-index.sh
│ ├── generate-sdk-perf-bin
│ ├── generate-smithy-rs-release
│ ├── run-canary
│ └── test-windows.sh
└── echo-server/
├── Cargo.toml
├── README.md
└── src/
└── main.rs
Showing preview only (1,018K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (11623 symbols across 889 files)
FILE: .github/workflows/release-scripts/create-release.js
function getExistingRelease (line 17) | async function getExistingRelease(github, tag) {
function loadReleaseManifest (line 30) | function loadReleaseManifest(path) {
FILE: .pre-commit-hooks/kotlin-block-quotes.py
function without_line_comment (line 26) | def without_line_comment(line):
function _calc_block_comment (line 32) | def _calc_block_comment(line, direction):
function starts_block_comment (line 46) | def starts_block_comment(line):
function ends_block_comment (line 50) | def ends_block_comment(line):
function starts_or_ends_block_quote (line 54) | def starts_or_ends_block_quote(line, inside_block_quotes):
function line_indent (line 66) | def line_indent(line):
function adjust_indent (line 74) | def adjust_indent(line, indent):
class State (line 82) | class State(Enum):
function fix_lines (line 88) | def fix_lines(lines):
function only_changed_indentation (line 142) | def only_changed_indentation(lines_before, lines_after):
function fix_file (line 151) | def fix_file(file_name):
class SelfTest (line 175) | class SelfTest(unittest.TestCase):
method test_starts_block_comment (line 176) | def test_starts_block_comment(self):
method test_ends_block_comment (line 194) | def test_ends_block_comment(self):
method test_starts_or_ends_block_quote (line 204) | def test_starts_or_ends_block_quote(self):
method test_line_indent (line 219) | def test_line_indent(self):
method test_adjust_indent (line 225) | def test_adjust_indent(self):
method test_only_changed_indentation (line 230) | def test_only_changed_indentation(self):
method fix_lines_test_case (line 238) | def fix_lines_test_case(self, expected, input, lines_changed):
method test_fix_lines (line 243) | def test_fix_lines(self):
function main (line 270) | def main():
FILE: aws/rust-runtime/aws-config/examples/imds.rs
function main (line 12) | async fn main() -> Result<(), Box<dyn std::error::Error>> {
FILE: aws/rust-runtime/aws-config/integration-tests/eks-credentials/lib/eks-credentials-stack.ts
class EksCredentialsStack (line 13) | class EksCredentialsStack extends Stack {
method constructor (line 14) | constructor(scope: Construct, id: string, props?: StackProps) {
FILE: aws/rust-runtime/aws-config/integration-tests/eks-credentials/test.rs
function main (line 8) | async fn main() {
FILE: aws/rust-runtime/aws-config/src/credential_process.rs
type CredentialProcessProvider (line 57) | pub struct CredentialProcessProvider {
method new (line 73) | pub fn new(command: String) -> Self {
method builder (line 80) | pub(crate) fn builder() -> Builder {
method credentials (line 84) | async fn credentials(&self) -> provider::Result {
method provide_credentials (line 63) | fn provide_credentials<'a>(&'a self) -> future::ProvideCredentials<'a>
type Builder (line 140) | pub(crate) struct Builder {
method command (line 146) | pub(crate) fn command(mut self, command: CommandWithSensitiveArgs<Stri...
method account_id (line 152) | pub(crate) fn account_id(mut self, account_id: impl Into<AccountId>) -...
method set_account_id (line 157) | pub(crate) fn set_account_id(&mut self, account_id: Option<AccountId>) {
method build (line 161) | pub(crate) fn build(self) -> CredentialProcessProvider {
function parse_credential_process_json_credentials (line 176) | pub(crate) fn parse_credential_process_json_credentials(
function parse_expiration (line 257) | fn parse_expiration(expiration: impl AsRef<str>) -> Result<SystemTime, I...
function test_credential_process (line 280) | async fn test_credential_process() {
function test_credential_process_no_expiry (line 304) | async fn test_credential_process_no_expiry() {
function credentials_process_timeouts (line 316) | async fn credentials_process_timeouts() {
function credentials_with_fallback_account_id (line 324) | async fn credentials_with_fallback_account_id() {
function fallback_account_id_shadowed_by_account_id_in_process_output (line 336) | async fn fallback_account_id_shadowed_by_account_id_in_process_output() {
function credential_feature (line 348) | async fn credential_feature() {
FILE: aws/rust-runtime/aws-config/src/default_provider/account_id_endpoint_mode.rs
constant ACCOUNT_ID_ENDPOINT_MODE (line 13) | pub(super) const ACCOUNT_ID_ENDPOINT_MODE: &str = "AWS_ACCOUNT_ID_ENDPOI...
constant ACCOUNT_ID_ENDPOINT_MODE (line 17) | pub(super) const ACCOUNT_ID_ENDPOINT_MODE: &str = "account_id_endpoint_m...
function account_id_endpoint_mode_provider (line 27) | pub(crate) async fn account_id_endpoint_mode_provider(
function log_error_on_invalid_value (line 53) | async fn log_error_on_invalid_value() {
function environment_priority (line 64) | async fn environment_priority() {
FILE: aws/rust-runtime/aws-config/src/default_provider/app_name.rs
function default_provider (line 33) | pub fn default_provider() -> Builder {
type Builder (line 39) | pub struct Builder {
method configure (line 47) | pub(crate) fn configure(self, configuration: &ProviderConfig) -> Self {
method profile_name (line 54) | pub fn profile_name(mut self, name: &str) -> Self {
method fallback_app_name (line 59) | async fn fallback_app_name(&self) -> Result<Option<AppName>, EnvConfig...
method app_name (line 69) | pub async fn app_name(self) -> Option<AppName> {
function prefer_env_to_profile (line 100) | async fn prefer_env_to_profile() {
function profile_name_override (line 121) | async fn profile_name_override() {
function load_from_profile (line 144) | async fn load_from_profile() {
function load_from_profile_old_name (line 161) | async fn load_from_profile_old_name() {
FILE: aws/rust-runtime/aws-config/src/default_provider/auth_scheme_preference.rs
constant AUTH_SCHEME_PREFERENCE (line 14) | pub(super) const AUTH_SCHEME_PREFERENCE: &str = "AWS_AUTH_SCHEME_PREFERE...
constant AUTH_SCHEME_PREFERENCE (line 18) | pub(super) const AUTH_SCHEME_PREFERENCE: &str = "auth_scheme_preference";
function auth_scheme_preference_provider (line 32) | pub(crate) async fn auth_scheme_preference_provider(
function parse_auth_scheme_names (line 46) | fn parse_auth_scheme_names(csv: &str) -> Result<AuthSchemePreference, In...
type InvalidAuthSchemeNamesCsv (line 63) | pub(crate) struct InvalidAuthSchemeNamesCsv {
method fmt (line 68) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function log_error_on_invalid_value (line 91) | async fn log_error_on_invalid_value() {
function environment_priority (line 115) | async fn environment_priority() {
function load_from_profile (line 151) | async fn load_from_profile() {
FILE: aws/rust-runtime/aws-config/src/default_provider/checksums.rs
constant REQUEST_CHECKSUM_CALCULATION (line 13) | pub(super) const REQUEST_CHECKSUM_CALCULATION: &str = "AWS_REQUEST_CHECK...
constant RESPONSE_CHECKSUM_VALIDATION (line 14) | pub(super) const RESPONSE_CHECKSUM_VALIDATION: &str = "AWS_RESPONSE_CHEC...
constant REQUEST_CHECKSUM_CALCULATION (line 18) | pub(super) const REQUEST_CHECKSUM_CALCULATION: &str = "request_checksum_...
constant RESPONSE_CHECKSUM_VALIDATION (line 19) | pub(super) const RESPONSE_CHECKSUM_VALIDATION: &str = "response_checksum...
function request_checksum_calculation_provider (line 29) | pub async fn request_checksum_calculation_provider(
function response_checksum_validation_provider (line 56) | pub async fn response_checksum_validation_provider(
function log_error_on_invalid_value_request (line 92) | async fn log_error_on_invalid_value_request() {
function environment_priority_request (line 109) | async fn environment_priority_request() {
function profile_works_request (line 140) | async fn profile_works_request() {
function default_works_request (line 167) | async fn default_works_request() {
function log_error_on_invalid_value_response (line 177) | async fn log_error_on_invalid_value_response() {
function environment_priority_response (line 194) | async fn environment_priority_response() {
function profile_works_response (line 225) | async fn profile_works_response() {
function default_works_response (line 252) | async fn default_works_response() {
FILE: aws/rust-runtime/aws-config/src/default_provider/credentials.rs
function default_provider (line 21) | pub async fn default_provider() -> impl ProvideCredentials {
type DefaultCredentialsChain (line 62) | pub struct DefaultCredentialsChain {
method builder (line 68) | pub fn builder() -> Builder {
method credentials (line 72) | async fn credentials(&self) -> provider::Result {
method provide_credentials (line 81) | fn provide_credentials<'a>(&'a self) -> future::ProvideCredentials<'a>
method fallback_on_interrupt (line 88) | fn fallback_on_interrupt(&self) -> Option<Credentials> {
type Builder (line 95) | pub struct Builder {
method region (line 109) | pub fn region(mut self, region: impl ProvideRegion + 'static) -> Self {
method set_region (line 117) | pub fn set_region(&mut self, region: Option<impl ProvideRegion + 'stat...
method with_custom_credential_source (line 135) | pub fn with_custom_credential_source(
method profile_name (line 149) | pub fn profile_name(mut self, name: &str) -> Self {
method imds_client (line 158) | pub fn imds_client(mut self, client: crate::imds::Client) -> Self {
method configure (line 164) | pub fn configure(mut self, config: ProviderConfig) -> Self {
method build (line 175) | pub async fn build(self) -> DefaultCredentialsChain {
function profile_name_override (line 330) | async fn profile_name_override() {
function no_providers_configured_err (line 357) | async fn no_providers_configured_err() {
FILE: aws/rust-runtime/aws-config/src/default_provider/disable_request_compression.rs
constant DISABLE_REQUEST_COMPRESSION (line 12) | pub(super) const DISABLE_REQUEST_COMPRESSION: &str = "AWS_DISABLE_REQUES...
constant DISABLE_REQUEST_COMPRESSION (line 16) | pub(super) const DISABLE_REQUEST_COMPRESSION: &str = "disable_request_co...
function disable_request_compression_provider (line 26) | pub(crate) async fn disable_request_compression_provider(
function log_error_on_invalid_value (line 53) | async fn log_error_on_invalid_value() {
function environment_priority (line 67) | async fn environment_priority() {
function profile_config_works (line 98) | async fn profile_config_works() {
FILE: aws/rust-runtime/aws-config/src/default_provider/endpoint_url.rs
constant ENDPOINT_URL (line 13) | pub(super) const ENDPOINT_URL: &str = "AWS_ENDPOINT_URL";
constant ENDPOINT_URL (line 17) | pub(super) const ENDPOINT_URL: &str = "endpoint_url";
function endpoint_url_provider (line 27) | pub async fn endpoint_url_provider(provider_config: &ProviderConfig) -> ...
function endpoint_url_provider_with_origin (line 48) | pub async fn endpoint_url_provider_with_origin(
function log_error_on_invalid_value (line 76) | async fn log_error_on_invalid_value() {
function environment_priority (line 86) | async fn environment_priority() {
FILE: aws/rust-runtime/aws-config/src/default_provider/ignore_configured_endpoint_urls.rs
constant IGNORE_CONFIGURED_ENDPOINT_URLS (line 12) | pub(super) const IGNORE_CONFIGURED_ENDPOINT_URLS: &str = "AWS_IGNORE_CON...
constant IGNORE_CONFIGURED_ENDPOINT_URLS (line 16) | pub(super) const IGNORE_CONFIGURED_ENDPOINT_URLS: &str = "ignore_configu...
function ignore_configured_endpoint_urls_provider (line 26) | pub async fn ignore_configured_endpoint_urls_provider(
function log_error_on_invalid_value (line 54) | async fn log_error_on_invalid_value() {
function environment_priority (line 68) | async fn environment_priority() {
FILE: aws/rust-runtime/aws-config/src/default_provider/region.rs
function default_provider (line 19) | pub fn default_provider() -> impl ProvideRegion {
type DefaultRegionChain (line 25) | pub struct DefaultRegionChain(RegionProviderChain);
method region (line 29) | pub async fn region(&self) -> Option<Region> {
method builder (line 34) | pub fn builder() -> Builder {
type Builder (line 41) | pub struct Builder {
method configure (line 51) | pub(crate) fn configure(mut self, configuration: &ProviderConfig) -> S...
method profile_name (line 59) | pub fn profile_name(mut self, name: &str) -> Self {
method build (line 65) | pub fn build(self) -> DefaultRegionChain {
method region (line 75) | fn region(&self) -> crate::meta::region::future::ProvideRegion<'_> {
FILE: aws/rust-runtime/aws-config/src/default_provider/request_min_compression_size_bytes.rs
constant REQUEST_MIN_COMPRESSION_SIZE_BYTES (line 12) | pub(super) const REQUEST_MIN_COMPRESSION_SIZE_BYTES: &str =
constant REQUEST_MIN_COMPRESSION_SIZE_BYTES (line 17) | pub(super) const REQUEST_MIN_COMPRESSION_SIZE_BYTES: &str =
function request_min_compression_size_bytes_provider (line 28) | pub(crate) async fn request_min_compression_size_bytes_provider(
function log_error_on_invalid_value (line 55) | async fn log_error_on_invalid_value() {
function environment_priority (line 72) | async fn environment_priority() {
function profile_config_works (line 103) | async fn profile_config_works() {
FILE: aws/rust-runtime/aws-config/src/default_provider/retry_config.rs
function default_provider (line 49) | pub fn default_provider() -> Builder {
constant MAX_ATTEMPTS (line 54) | pub(super) const MAX_ATTEMPTS: &str = "AWS_MAX_ATTEMPTS";
constant RETRY_MODE (line 55) | pub(super) const RETRY_MODE: &str = "AWS_RETRY_MODE";
constant MAX_ATTEMPTS (line 59) | pub(super) const MAX_ATTEMPTS: &str = "max_attempts";
constant RETRY_MODE (line 60) | pub(super) const RETRY_MODE: &str = "retry_mode";
type Builder (line 65) | pub struct Builder {
method configure (line 73) | pub fn configure(mut self, configuration: &ProviderConfig) -> Self {
method profile_name (line 79) | pub fn profile_name(mut self, name: &str) -> Self {
method retry_config (line 95) | pub async fn retry_config(self) -> RetryConfig {
method try_retry_config (line 102) | pub(crate) async fn try_retry_config(
function validate_max_attempts (line 136) | fn validate_max_attempts(max_attempts: &str) -> Result<u32, RetryConfigE...
function test_provider (line 154) | async fn test_provider(
function test_returns_default_retry_config_from_empty_profile (line 164) | async fn test_returns_default_retry_config_from_empty_profile() {
function test_no_retry_config_in_empty_profile (line 185) | async fn test_no_retry_config_in_empty_profile() {
function test_creation_of_retry_config_from_profile (line 202) | async fn test_creation_of_retry_config_from_profile() {
function test_env_retry_config_takes_precedence_over_profile_retry_config (line 229) | async fn test_env_retry_config_takes_precedence_over_profile_retry_confi...
function test_invalid_profile_retry_config_panics (line 261) | async fn test_invalid_profile_retry_config_panics() {
function defaults (line 280) | async fn defaults() {
function max_attempts_is_read_correctly (line 288) | async fn max_attempts_is_read_correctly() {
function max_attempts_errors_when_it_cant_be_parsed_as_an_integer (line 296) | async fn max_attempts_errors_when_it_cant_be_parsed_as_an_integer() {
function retry_mode_is_read_correctly (line 309) | async fn retry_mode_is_read_correctly() {
function both_fields_can_be_set_at_once (line 319) | async fn both_fields_can_be_set_at_once() {
function disallow_zero_max_attempts (line 329) | async fn disallow_zero_max_attempts() {
FILE: aws/rust-runtime/aws-config/src/default_provider/sigv4a_signing_region_set.rs
constant SIGV4A_SIGNING_REGION_SET (line 13) | pub(super) const SIGV4A_SIGNING_REGION_SET: &str = "AWS_SIGV4A_SIGNING_R...
constant SIGV4A_SIGNING_REGION_SET (line 17) | pub(super) const SIGV4A_SIGNING_REGION_SET: &str = "sigv4a_signing_regio...
function sigv4a_signing_region_set_provider (line 24) | pub(crate) async fn sigv4a_signing_region_set_provider(
function parse_signing_region_set (line 43) | fn parse_signing_region_set(csv: &str) -> Result<SigningRegionSet, Inval...
type InvalidSigningRegionSet (line 58) | struct InvalidSigningRegionSet {
method fmt (line 63) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function load_from_env_var (line 82) | async fn load_from_env_var() {
function load_from_env_var_multi_region (line 90) | async fn load_from_env_var_multi_region() {
function load_from_profile (line 101) | async fn load_from_profile() {
function env_var_wins_over_profile (line 125) | async fn env_var_wins_over_profile() {
function returns_none_when_not_configured (line 153) | async fn returns_none_when_not_configured() {
function log_error_on_empty_value (line 161) | async fn log_error_on_empty_value() {
FILE: aws/rust-runtime/aws-config/src/default_provider/timeout_config.rs
constant SDK_DEFAULT_CONNECT_TIMEOUT (line 10) | const SDK_DEFAULT_CONNECT_TIMEOUT: Duration = Duration::from_millis(3100);
function default_provider (line 17) | pub fn default_provider() -> Builder {
type Builder (line 24) | pub struct Builder;
method configure (line 30) | pub fn configure(self, _configuration: &ProviderConfig) -> Self {
method timeout_config (line 35) | pub async fn timeout_config(self) -> TimeoutConfig {
FILE: aws/rust-runtime/aws-config/src/default_provider/token.rs
function default_provider (line 15) | pub async fn default_provider() -> impl ProvideToken {
type DefaultTokenChain (line 53) | pub struct DefaultTokenChain {
method builder (line 59) | pub fn builder() -> Builder {
method provide_token (line 65) | fn provide_token<'a>(&'a self) -> future::ProvideToken<'a>
type Builder (line 75) | pub struct Builder {
method region (line 86) | pub fn region(mut self, region: impl ProvideRegion + 'static) -> Self {
method set_region (line 94) | pub fn set_region(&mut self, region: Option<impl ProvideRegion + 'stat...
method profile_name (line 102) | pub fn profile_name(mut self, name: &str) -> Self {
method configure (line 109) | pub(crate) fn configure(mut self, config: ProviderConfig) -> Self {
method build (line 116) | pub async fn build(self) -> DefaultTokenChain {
FILE: aws/rust-runtime/aws-config/src/default_provider/use_dual_stack.rs
constant USE_DUAL_STACK (line 12) | pub(super) const USE_DUAL_STACK: &str = "AWS_USE_DUALSTACK_ENDPOINT";
constant USE_DUAL_STACK (line 16) | pub(super) const USE_DUAL_STACK: &str = "use_dualstack_endpoint";
function use_dual_stack_provider (line 26) | pub async fn use_dual_stack_provider(provider_config: &ProviderConfig) -...
function log_error_on_invalid_value (line 51) | async fn log_error_on_invalid_value() {
function environment_priority (line 63) | async fn environment_priority() {
function profile_works (line 88) | async fn profile_works() {
FILE: aws/rust-runtime/aws-config/src/default_provider/use_fips.rs
constant USE_FIPS (line 12) | pub(super) const USE_FIPS: &str = "AWS_USE_FIPS_ENDPOINT";
constant USE_FIPS (line 16) | pub(super) const USE_FIPS: &str = "use_fips_endpoint";
function use_fips_provider (line 26) | pub async fn use_fips_provider(provider_config: &ProviderConfig) -> Opti...
function log_error_on_invalid_value (line 51) | async fn log_error_on_invalid_value() {
function environment_priority (line 63) | async fn environment_priority() {
FILE: aws/rust-runtime/aws-config/src/ecs.rs
constant DEFAULT_READ_TIMEOUT (line 76) | const DEFAULT_READ_TIMEOUT: Duration = Duration::from_secs(5);
constant DEFAULT_CONNECT_TIMEOUT (line 77) | const DEFAULT_CONNECT_TIMEOUT: Duration = Duration::from_secs(2);
constant BASE_HOST (line 80) | const BASE_HOST: &str = "http://169.254.170.2";
constant ENV_RELATIVE_URI (line 81) | const ENV_RELATIVE_URI: &str = "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI";
constant ENV_FULL_URI (line 82) | const ENV_FULL_URI: &str = "AWS_CONTAINER_CREDENTIALS_FULL_URI";
constant ENV_AUTHORIZATION_TOKEN (line 83) | const ENV_AUTHORIZATION_TOKEN: &str = "AWS_CONTAINER_AUTHORIZATION_TOKEN";
constant ENV_AUTHORIZATION_TOKEN_FILE (line 84) | const ENV_AUTHORIZATION_TOKEN_FILE: &str = "AWS_CONTAINER_AUTHORIZATION_...
type EcsCredentialsProvider (line 92) | pub struct EcsCredentialsProvider {
method builder (line 101) | pub fn builder() -> Builder {
method credentials (line 106) | pub async fn credentials(&self) -> provider::Result {
method provider (line 145) | async fn provider(&self) -> &Provider {
method provide_credentials (line 153) | fn provide_credentials<'a>(&'a self) -> future::ProvideCredentials<'a>
type Provider (line 164) | enum Provider {
method uri (line 171) | async fn uri(env: Env, dns: Option<SharedDnsResolver>) -> Result<Uri, ...
method make (line 186) | async fn make(builder: Builder) -> Self {
method build_full_uri (line 218) | fn build_full_uri(relative_uri: String) -> Result<Uri, EcsConfiguratio...
type EcsConfigurationError (line 237) | enum EcsConfigurationError {
method fmt (line 254) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
method source (line 275) | fn source(&self) -> Option<&(dyn Error + 'static)> {
type Builder (line 287) | pub struct Builder {
method configure (line 296) | pub fn configure(mut self, provider_config: &ProviderConfig) -> Self {
method dns (line 305) | pub fn dns(mut self, dns: impl ResolveDns + 'static) -> Self {
method connect_timeout (line 313) | pub fn connect_timeout(mut self, timeout: Duration) -> Self {
method read_timeout (line 321) | pub fn read_timeout(mut self, timeout: Duration) -> Self {
method build (line 327) | pub fn build(self) -> EcsCredentialsProvider {
type InvalidFullUriErrorKind (line 348) | enum InvalidFullUriErrorKind {
type InvalidFullUriError (line 374) | pub struct InvalidFullUriError {
method from (line 410) | fn from(kind: InvalidFullUriErrorKind) -> Self {
method fmt (line 379) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
method source (line 399) | fn source(&self) -> Option<&(dyn Error + 'static)> {
function validate_full_uri (line 422) | async fn validate_full_uri(
constant ECS_CONTAINER_IPV4 (line 465) | const ECS_CONTAINER_IPV4: IpAddr = IpAddr::V4(Ipv4Addr::new(169, 254, 17...
constant EKS_CONTAINER_IPV4 (line 468) | const EKS_CONTAINER_IPV4: IpAddr = IpAddr::V4(Ipv4Addr::new(169, 254, 17...
constant EKS_CONTAINER_IPV6 (line 471) | const EKS_CONTAINER_IPV6: IpAddr = IpAddr::V6(Ipv6Addr::new(0xFD00, 0x0E...
function is_full_uri_ip_allowed (line 472) | fn is_full_uri_ip_allowed(ip: &IpAddr) -> bool {
function default_dns (line 483) | fn default_dns() -> Option<SharedDnsResolver> {
function default_dns (line 487) | fn default_dns() -> Option<SharedDnsResolver> {
function provider (line 518) | fn provider(
type EcsUriTest (line 532) | struct EcsUriTest {
method check (line 538) | async fn check(&self) {
function run_config_tests (line 548) | async fn run_config_tests() -> Result<(), Box<dyn Error>> {
function validate_uri_https (line 564) | fn validate_uri_https() {
function valid_uri_loopback (line 599) | fn valid_uri_loopback() {
function valid_uri_ecs_eks (line 621) | fn valid_uri_ecs_eks() {
function all_addrs_local (line 668) | fn all_addrs_local() {
function all_addrs_not_local (line 685) | fn all_addrs_not_local() {
function creds_request (line 708) | fn creds_request(uri: &str, auth: Option<&str>) -> http::Request<SdkBody> {
function ok_creds_response (line 716) | fn ok_creds_response() -> http::Response<SdkBody> {
function assert_correct (line 732) | fn assert_correct(creds: Credentials) {
function load_valid_creds_auth (line 744) | async fn load_valid_creds_auth() {
function load_valid_creds_auth_file (line 763) | async fn load_valid_creds_auth_file() {
function auth_file_precedence_over_env (line 798) | async fn auth_file_precedence_over_env() {
function query_params_should_be_included_in_credentials_http_request (line 834) | async fn query_params_should_be_included_in_credentials_http_request() {
function fs_missing_file (line 870) | async fn fs_missing_file() {
function retry_5xx (line 892) | async fn retry_5xx() {
function load_valid_creds_no_auth (line 917) | async fn load_valid_creds_no_auth() {
function real_dns_lookup (line 937) | async fn real_dns_lookup() {
type TestDns (line 973) | struct TestDns {
method with_fallback (line 995) | fn with_fallback(fallback: Vec<IpAddr>) -> Self {
method default (line 980) | fn default() -> Self {
method resolve_dns (line 1004) | fn resolve_dns<'a>(&'a self, name: &'a str) -> DnsFuture<'a> {
type NeverDns (line 1010) | struct NeverDns;
method resolve_dns (line 1012) | fn resolve_dns<'a>(&'a self, _name: &'a str) -> DnsFuture<'a> {
FILE: aws/rust-runtime/aws-config/src/env_service_config.rs
type EnvServiceConfig (line 12) | pub(crate) struct EnvServiceConfig {
method load_config (line 18) | fn load_config(&self, key: ServiceConfigKey<'_>) -> Option<String> {
FILE: aws/rust-runtime/aws-config/src/environment/credentials.rs
type EnvironmentVariableCredentialsProvider (line 22) | pub struct EnvironmentVariableCredentialsProvider {
method credentials (line 27) | fn credentials(&self) -> provider::Result {
method new (line 72) | pub fn new() -> Self {
method new_with_env (line 79) | pub(crate) fn new_with_env(env: Env) -> Self {
method default (line 85) | fn default() -> Self {
constant ENV_PROVIDER (line 90) | const ENV_PROVIDER: &str = "EnvironmentVariable";
method provide_credentials (line 93) | fn provide_credentials<'a>(&'a self) -> future::ProvideCredentials<'a>
function to_cred_error (line 101) | fn to_cred_error(err: VarError) -> CredentialsError {
function err_if_blank (line 108) | fn err_if_blank(value: String) -> Result<String, VarError> {
function make_provider (line 125) | fn make_provider(vars: &[(&str, &str)]) -> EnvironmentVariableCredential...
function valid_no_token (line 132) | fn valid_no_token() {
function valid_with_token (line 148) | fn valid_with_token() {
function empty_token_env_var (line 166) | fn empty_token_env_var() {
function secret_key_fallback (line 186) | fn secret_key_fallback() {
function secret_key_fallback_empty (line 204) | fn secret_key_fallback_empty() {
function missing (line 223) | fn missing() {
function empty_keys_env_vars (line 234) | fn empty_keys_env_vars() {
function credentials_feature (line 260) | fn credentials_feature() {
function real_environment (line 280) | fn real_environment() {
FILE: aws/rust-runtime/aws-config/src/environment/mod.rs
type InvalidBooleanValue (line 20) | pub(crate) struct InvalidBooleanValue {
method fmt (line 25) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function parse_bool (line 32) | pub(crate) fn parse_bool(value: &str) -> Result<bool, InvalidBooleanValu...
type InvalidUintValue (line 45) | pub(crate) struct InvalidUintValue {
method fmt (line 50) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function parse_uint (line 57) | pub(crate) fn parse_uint(value: &str) -> Result<u32, InvalidUintValue> {
type InvalidUrlValue (line 64) | pub(crate) struct InvalidUrlValue {
method fmt (line 69) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function parse_url (line 76) | pub(crate) fn parse_url(value: &str) -> Result<String, InvalidUrlValue> {
FILE: aws/rust-runtime/aws-config/src/environment/region.rs
type EnvironmentVariableRegionProvider (line 15) | pub struct EnvironmentVariableRegionProvider {
method new (line 21) | pub fn new() -> Self {
method new_with_env (line 28) | pub(crate) fn new_with_env(env: Env) -> Self {
method region (line 34) | fn region(&self) -> future::ProvideRegion<'_> {
function test_provider (line 52) | fn test_provider(vars: &[(&str, &str)]) -> EnvironmentVariableRegionProv...
function no_region (line 57) | fn no_region() {
function prioritize_aws_region (line 68) | fn prioritize_aws_region() {
function fallback_to_default_region (line 80) | fn fallback_to_default_region() {
FILE: aws/rust-runtime/aws-config/src/http_credential_provider.rs
constant DEFAULT_READ_TIMEOUT (line 39) | const DEFAULT_READ_TIMEOUT: Duration = Duration::from_secs(5);
constant DEFAULT_CONNECT_TIMEOUT (line 40) | const DEFAULT_CONNECT_TIMEOUT: Duration = Duration::from_secs(2);
type HttpProviderAuth (line 43) | struct HttpProviderAuth {
type HttpCredentialProvider (line 48) | pub(crate) struct HttpCredentialProvider {
method builder (line 53) | pub(crate) fn builder() -> Builder {
method credentials (line 57) | pub(crate) async fn credentials(&self, auth: Option<HeaderValue>) -> p...
type Builder (line 77) | pub(crate) struct Builder {
method configure (line 83) | pub(crate) fn configure(mut self, provider_config: &ProviderConfig) ->...
method http_connector_settings (line 88) | pub(crate) fn http_connector_settings(
method build (line 96) | pub(crate) fn build(
function parse_response (line 170) | fn parse_response(
type HttpCredentialRetryClassifier (line 213) | struct HttpCredentialRetryClassifier;
method name (line 216) | fn name(&self) -> &'static str {
method classify_retry (line 220) | fn classify_retry(&self, ctx: &InterceptorContext) -> RetryAction {
function provide_creds (line 252) | async fn provide_creds(
function successful_req_resp (line 262) | fn successful_req_resp() -> ReplayEvent {
function successful_response (line 283) | async fn successful_response() {
function retry_nonparseable_response (line 297) | async fn retry_nonparseable_response() {
function retry_error_code (line 317) | async fn retry_error_code() {
function explicit_error_not_retryable (line 337) | async fn explicit_error_not_retryable() {
function credentials_feature (line 361) | async fn credentials_feature() {
FILE: aws/rust-runtime/aws-config/src/imds/client.rs
constant DEFAULT_TOKEN_TTL (line 52) | const DEFAULT_TOKEN_TTL: Duration = Duration::from_secs(21_600);
constant DEFAULT_ATTEMPTS (line 53) | const DEFAULT_ATTEMPTS: u32 = 4;
constant DEFAULT_CONNECT_TIMEOUT (line 54) | const DEFAULT_CONNECT_TIMEOUT: Duration = Duration::from_secs(1);
constant DEFAULT_READ_TIMEOUT (line 55) | const DEFAULT_READ_TIMEOUT: Duration = Duration::from_secs(1);
constant DEFAULT_OPERATION_TIMEOUT (line 56) | const DEFAULT_OPERATION_TIMEOUT: Duration = Duration::from_secs(30);
constant DEFAULT_OPERATION_ATTEMPT_TIMEOUT (line 57) | const DEFAULT_OPERATION_ATTEMPT_TIMEOUT: Duration = Duration::from_secs(...
function user_agent (line 59) | fn user_agent() -> AwsUserAgent {
type Client (line 132) | pub struct Client {
method builder (line 138) | pub fn builder() -> Builder {
method get (line 162) | pub async fn get(&self, path: impl Into<String>) -> Result<SensitiveSt...
type SensitiveString (line 202) | pub struct SensitiveString(String);
method fmt (line 205) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method as_ref (line 213) | fn as_ref(&self) -> &str {
method from (line 219) | fn from(value: String) -> Self {
method from (line 225) | fn from(value: SensitiveString) -> Self {
type ImdsCommonRuntimePlugin (line 234) | struct ImdsCommonRuntimePlugin {
method new (line 240) | fn new(
method config (line 270) | fn config(&self) -> Option<FrozenLayer> {
method runtime_components (line 274) | fn runtime_components(
type EndpointMode (line 289) | pub enum EndpointMode {
method endpoint (line 312) | fn endpoint(&self) -> Uri {
type Err (line 299) | type Err = InvalidEndpointMode;
method from_str (line 301) | fn from_str(value: &str) -> Result<Self, Self::Err> {
type Builder (line 322) | pub struct Builder {
method max_attempts (line 339) | pub fn max_attempts(mut self, max_attempts: u32) -> Self {
method configure (line 357) | pub fn configure(mut self, provider_config: &ProviderConfig) -> Self {
method endpoint (line 367) | pub fn endpoint(mut self, endpoint: impl AsRef<str>) -> Result<Self, B...
method endpoint_mode (line 377) | pub fn endpoint_mode(mut self, mode: EndpointMode) -> Self {
method token_ttl (line 387) | pub fn token_ttl(mut self, ttl: Duration) -> Self {
method connect_timeout (line 395) | pub fn connect_timeout(mut self, timeout: Duration) -> Self {
method read_timeout (line 403) | pub fn read_timeout(mut self, timeout: Duration) -> Self {
method operation_timeout (line 411) | pub fn operation_timeout(mut self, timeout: Duration) -> Self {
method operation_attempt_timeout (line 419) | pub fn operation_attempt_timeout(mut self, timeout: Duration) -> Self {
method retry_classifier (line 429) | pub fn retry_classifier(mut self, retry_classifier: SharedRetryClassif...
method build (line 442) | pub fn build(self) -> Client {
constant ENDPOINT (line 513) | pub(super) const ENDPOINT: &str = "AWS_EC2_METADATA_SERVICE_ENDPOINT";
constant ENDPOINT_MODE (line 514) | pub(super) const ENDPOINT_MODE: &str = "AWS_EC2_METADATA_SERVICE_ENDPOIN...
constant ENDPOINT (line 518) | pub(super) const ENDPOINT: &str = "ec2_metadata_service_endpoint";
constant ENDPOINT_MODE (line 519) | pub(super) const ENDPOINT_MODE: &str = "ec2_metadata_service_endpoint_mo...
type EndpointSource (line 524) | enum EndpointSource {
method endpoint (line 530) | async fn endpoint(&self, mode_override: Option<EndpointMode>) -> Resul...
type ImdsEndpointResolver (line 576) | struct ImdsEndpointResolver {
method resolve_endpoint (line 582) | fn resolve_endpoint<'a>(&'a self, _: &'a EndpointResolverParams) -> Endp...
type ImdsResponseRetryClassifier (line 605) | pub struct ImdsResponseRetryClassifier {
method with_retry_connect_timeouts (line 611) | pub fn with_retry_connect_timeouts(mut self, retry_connect_timeouts: b...
method name (line 618) | fn name(&self) -> &'static str {
method classify_retry (line 622) | fn classify_retry(&self, ctx: &InterceptorContext) -> RetryAction {
constant TOKEN_A (line 689) | const TOKEN_A: &str = "AQAEAFTNrA4eEGx0AQgJ1arIq_Cc-t4tWt3fB0Hd8RKhXlKc5...
constant TOKEN_B (line 690) | const TOKEN_B: &str = "alternatetoken==";
function token_request (line 693) | pub(crate) fn token_request(base: &str, ttl: u32) -> HttpRequest {
function token_response (line 705) | pub(crate) fn token_response(ttl: u32, token: &'static str) -> HttpRespo...
function imds_request (line 717) | pub(crate) fn imds_request(path: &'static str, token: &str) -> HttpReque...
function imds_response (line 729) | pub(crate) fn imds_response(body: &'static str) -> HttpResponse {
function make_imds_client (line 740) | pub(crate) fn make_imds_client(http_client: &StaticReplayClient) -> supe...
function mock_imds_client (line 751) | fn mock_imds_client(events: Vec<ReplayEvent>) -> (Client, StaticReplayCl...
function client_caches_token (line 758) | async fn client_caches_token() {
function token_can_expire (line 783) | async fn token_can_expire() {
function token_refresh_buffer (line 825) | async fn token_refresh_buffer() {
function retry_500 (line 882) | async fn retry_500() {
function retry_token_failure (line 919) | async fn retry_token_failure() {
function retry_metadata_401 (line 951) | async fn retry_metadata_401() {
function no_403_retry (line 987) | async fn no_403_retry() {
function successful_response_properly_classified (line 1002) | fn successful_response_properly_classified() {
function user_provided_retry_classifier (line 1025) | async fn user_provided_retry_classifier() {
function invalid_token (line 1084) | async fn invalid_token() {
function non_utf8_response (line 1095) | async fn non_utf8_response() {
function one_second_connect_timeout (line 1119) | async fn one_second_connect_timeout() {
function retry_connect_timeouts (line 1154) | async fn retry_connect_timeouts() {
type ImdsConfigTest (line 1187) | struct ImdsConfigTest {
function endpoint_config_tests (line 1197) | async fn endpoint_config_tests() -> Result<(), Box<dyn Error>> {
function check (line 1214) | async fn check(test_case: ImdsConfigTest) {
FILE: aws/rust-runtime/aws-config/src/imds/client/error.rs
type FailedToLoadToken (line 15) | pub struct FailedToLoadToken {
method is_dispatch_failure (line 21) | pub fn is_dispatch_failure(&self) -> bool {
method into_source (line 25) | pub(crate) fn into_source(self) -> SdkError<TokenError, HttpResponse> {
type ErrorResponse (line 32) | pub struct ErrorResponse {
method response (line 38) | pub fn response(&self) -> &HttpResponse {
type IoError (line 45) | pub struct IoError {
type Unexpected (line 51) | pub struct Unexpected {
type ImdsError (line 58) | pub enum ImdsError {
method failed_to_load_token (line 78) | pub(super) fn failed_to_load_token(source: SdkError<TokenError, HttpRe...
method error_response (line 82) | pub(super) fn error_response(raw: HttpResponse) -> Self {
method io_error (line 86) | pub(super) fn io_error(source: impl Into<Box<dyn Error + Send + Sync +...
method unexpected (line 92) | pub(super) fn unexpected(source: impl Into<Box<dyn Error + Send + Sync...
method fmt (line 100) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method source (line 122) | fn source(&self) -> Option<&(dyn Error + 'static)> {
type InnerImdsError (line 133) | pub(super) enum InnerImdsError {
method fmt (line 139) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> std::fmt::Result {
type InvalidEndpointMode (line 151) | pub struct InvalidEndpointMode {
method new (line 156) | pub(super) fn new(mode: impl Into<String>) -> Self {
method fmt (line 162) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type BuildErrorKind (line 175) | enum BuildErrorKind {
type BuildError (line 185) | pub struct BuildError {
method invalid_endpoint_mode (line 190) | pub(super) fn invalid_endpoint_mode(source: InvalidEndpointMode) -> Se...
method invalid_endpoint_uri (line 196) | pub(super) fn invalid_endpoint_uri(
method fmt (line 206) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> std::fmt::Result {
method source (line 217) | fn source(&self) -> Option<&(dyn Error + 'static)> {
type TokenErrorKind (line 227) | pub(super) enum TokenErrorKind {
type TokenError (line 256) | pub struct TokenError {
method fmt (line 261) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method from (line 281) | fn from(kind: TokenErrorKind) -> Self {
FILE: aws/rust-runtime/aws-config/src/imds/client/token.rs
constant TOKEN_REFRESH_BUFFER (line 48) | const TOKEN_REFRESH_BUFFER: Duration = Duration::from_secs(120);
constant X_AWS_EC2_METADATA_TOKEN_TTL_SECONDS (line 50) | const X_AWS_EC2_METADATA_TOKEN_TTL_SECONDS: &str = "x-aws-ec2-metadata-t...
constant X_AWS_EC2_METADATA_TOKEN (line 51) | const X_AWS_EC2_METADATA_TOKEN: &str = "x-aws-ec2-metadata-token";
constant IMDS_TOKEN_AUTH_SCHEME (line 52) | const IMDS_TOKEN_AUTH_SCHEME: AuthSchemeId = AuthSchemeId::new(X_AWS_EC2...
type TtlToken (line 55) | struct TtlToken {
type Token (line 62) | struct Token {
method fmt (line 67) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type TokenRuntimePlugin (line 81) | pub(super) struct TokenRuntimePlugin {
method new (line 86) | pub(super) fn new(common_plugin: SharedRuntimePlugin, token_ttl: Durat...
method runtime_components (line 104) | fn runtime_components(
type TokenResolverInner (line 113) | struct TokenResolverInner {
type TokenResolver (line 119) | struct TokenResolver {
method new (line 124) | fn new(common_plugin: SharedRuntimePlugin, token_ttl: Duration) -> Self {
method get_token (line 152) | async fn get_token(
function parse_token_response (line 171) | fn parse_token_response(response: &HttpResponse) -> Result<TtlToken, Tok...
method resolve_identity (line 195) | fn resolve_identity<'a>(
type TokenAuthScheme (line 231) | struct TokenAuthScheme {
method new (line 236) | fn new() -> Self {
method scheme_id (line 244) | fn scheme_id(&self) -> AuthSchemeId {
method identity_resolver (line 248) | fn identity_resolver(
method signer (line 255) | fn signer(&self) -> &dyn Sign {
type TokenSigner (line 261) | struct TokenSigner;
method sign_http_request (line 264) | fn sign_http_request(
FILE: aws/rust-runtime/aws-config/src/imds/credentials.rs
constant CREDENTIAL_EXPIRATION_INTERVAL (line 26) | const CREDENTIAL_EXPIRATION_INTERVAL: Duration = Duration::from_secs(10 ...
constant WARNING_FOR_EXTENDING_CREDENTIALS_EXPIRY (line 27) | const WARNING_FOR_EXTENDING_CREDENTIALS_EXPIRY: &str =
type ImdsCommunicationError (line 32) | struct ImdsCommunicationError {
method fmt (line 37) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method source (line 43) | fn source(&self) -> Option<&(dyn StdError + 'static)> {
type ImdsCredentialsProvider (line 52) | pub struct ImdsCredentialsProvider {
method builder (line 143) | pub fn builder() -> Builder {
method imds_disabled (line 147) | fn imds_disabled(&self) -> bool {
method get_profile_uncached (line 155) | async fn get_profile_uncached(&self) -> Result<String, CredentialsErro...
method maybe_extend_expiration (line 183) | fn maybe_extend_expiration(&self, expiration: SystemTime) -> SystemTime {
method retrieve_credentials (line 210) | async fn retrieve_credentials(&self) -> provider::Result {
method credentials (line 276) | async fn credentials(&self) -> provider::Result {
type Builder (line 62) | pub struct Builder {
method configure (line 71) | pub fn configure(mut self, provider_config: &ProviderConfig) -> Self {
method profile (line 84) | pub fn profile(mut self, profile: impl Into<String>) -> Self {
method imds_client (line 95) | pub fn imds_client(mut self, client: imds::Client) -> Self {
method last_retrieved_credentials (line 102) | fn last_retrieved_credentials(mut self, credentials: Credentials) -> S...
method build (line 108) | pub fn build(self) -> ImdsCredentialsProvider {
constant ASSUME_ROLE_UNAUTHORIZED_ACCESS (line 125) | pub(super) const ASSUME_ROLE_UNAUTHORIZED_ACCESS: &str = "AssumeRoleUnau...
method provide_credentials (line 129) | fn provide_credentials<'a>(&'a self) -> future::ProvideCredentials<'a>
method fallback_on_interrupt (line 136) | fn fallback_on_interrupt(&self) -> Option<Credentials> {
constant TOKEN_A (line 303) | const TOKEN_A: &str = "token_a";
function profile_is_not_cached (line 306) | async fn profile_is_not_cached() {
function credentials_not_stale_should_be_used_as_they_are (line 342) | async fn credentials_not_stale_should_be_used_as_they_are() {
function expired_credentials_should_be_extended (line 387) | async fn expired_credentials_should_be_extended() {
function read_timeout_during_credentials_refresh_should_yield_last_retrieved_credentials (line 428) | async fn read_timeout_during_credentials_refresh_should_yield_last_retri...
function read_timeout_during_credentials_refresh_should_error_without_last_retrieved_credentials (line 446) | async fn read_timeout_during_credentials_refresh_should_error_without_la...
function external_timeout_during_credentials_refresh_should_yield_last_retrieved_credentials (line 468) | async fn external_timeout_during_credentials_refresh_should_yield_last_r...
function fallback_credentials_should_be_used_when_imds_returns_500_during_credentials_refresh (line 500) | async fn fallback_credentials_should_be_used_when_imds_returns_500_durin...
function credentials_feature (line 537) | async fn credentials_feature() {
FILE: aws/rust-runtime/aws-config/src/imds/mod.rs
constant EC2_METADATA_DISABLED (line 15) | pub(crate) const EC2_METADATA_DISABLED: &str = "AWS_EC2_METADATA_DISABLED";
FILE: aws/rust-runtime/aws-config/src/imds/region.rs
type ImdsRegionProvider (line 23) | pub struct ImdsRegionProvider {
method builder (line 41) | pub fn builder() -> Builder {
method imds_disabled (line 45) | fn imds_disabled(&self) -> bool {
method region (line 55) | pub async fn region(&self) -> Option<Region> {
method fmt (line 29) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
constant REGION_PATH (line 37) | const REGION_PATH: &str = "/latest/meta-data/placement/region";
method region (line 74) | fn region(&self) -> future::ProvideRegion<'_> {
type Builder (line 84) | pub struct Builder {
method configure (line 91) | pub fn configure(self, provider_config: &ProviderConfig) -> Self {
method imds_client (line 99) | pub fn imds_client(mut self, imds_client: imds::Client) -> Self {
method build (line 105) | pub fn build(self) -> ImdsRegionProvider {
function load_region (line 129) | async fn load_region() {
function no_region_imds_disabled (line 158) | async fn no_region_imds_disabled() {
FILE: aws/rust-runtime/aws-config/src/json_credentials.rs
type InvalidJsonCredentials (line 15) | pub(crate) enum InvalidJsonCredentials {
method from (line 32) | fn from(err: EscapeError) -> Self {
method from (line 38) | fn from(err: aws_smithy_json::deserialize::error::DeserializeError) ->...
method fmt (line 44) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type RefreshableCredentials (line 63) | pub(crate) struct RefreshableCredentials<'a> {
function fmt (line 72) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
type JsonCredentials (line 87) | pub(crate) enum JsonCredentials<'a> {
function parse_json_credentials (line 122) | pub(crate) fn parse_json_credentials(
function json_parse_loop (line 221) | pub(crate) fn json_parse_loop<'a>(
function json_credentials_success_response (line 264) | fn json_credentials_success_response() {
function json_credentials_invalid_json (line 290) | fn json_credentials_invalid_json() {
function json_credentials_not_json_object (line 299) | fn json_credentials_not_json_object() {
function json_credentials_missing_code (line 308) | fn json_credentials_missing_code() {
function json_credentials_required_session_token (line 332) | fn json_credentials_required_session_token() {
function json_credentials_missing_akid (line 349) | fn json_credentials_missing_akid() {
function json_credentials_error_response (line 366) | fn json_credentials_error_response() {
function json_credentials_ecs (line 384) | fn json_credentials_ecs() {
function case_insensitive_code_parsing (line 413) | fn case_insensitive_code_parsing() {
FILE: aws/rust-runtime/aws-config/src/lib.rs
constant PKG_VERSION (line 119) | const PKG_VERSION: &str = env!("CARGO_PKG_VERSION");
function from_env (line 159) | pub fn from_env() -> ConfigLoader {
function load_from_env (line 169) | pub async fn load_from_env() -> SdkConfig {
function from_env (line 178) | pub fn from_env() -> ConfigLoader {
function load_from_env (line 187) | pub async fn load_from_env() -> SdkConfig {
function defaults (line 205) | pub fn defaults(version: BehaviorVersion) -> ConfigLoader {
function load_defaults (line 214) | pub async fn load_defaults(version: BehaviorVersion) -> SdkConfig {
type TriStateOption (line 260) | enum TriStateOption<T> {
type ConfigLoader (line 277) | pub struct ConfigLoader {
method behavior_version (line 310) | pub fn behavior_version(mut self, behavior_version: BehaviorVersion) -...
method region (line 326) | pub fn region(mut self, region: impl ProvideRegion + 'static) -> Self {
method retry_config (line 344) | pub fn retry_config(mut self, retry_config: RetryConfig) -> Self {
method timeout_config (line 376) | pub fn timeout_config(mut self, timeout_config: TimeoutConfig) -> Self {
method sleep_impl (line 386) | pub fn sleep_impl(mut self, sleep: impl AsyncSleep + 'static) -> Self {
method time_source (line 397) | pub fn time_source(mut self, time_source: impl TimeSource + 'static) -...
method http_client (line 408) | pub fn http_client(mut self, http_client: impl HttpClient + 'static) -...
method auth_scheme_preference (line 427) | pub fn auth_scheme_preference(
method sigv4a_signing_region_set (line 436) | pub fn sigv4a_signing_region_set(
method identity_cache (line 470) | pub fn identity_cache(
method credentials_provider (line 495) | pub fn credentials_provider(
method no_credentials (line 525) | pub fn no_credentials(mut self) -> Self {
method test_credentials (line 531) | pub fn test_credentials(self) -> Self {
method empty_test_environment (line 547) | pub fn empty_test_environment(mut self) -> Self {
method token_provider (line 569) | pub fn token_provider(mut self, token_provider: impl ProvideToken + 's...
method app_name (line 595) | pub fn app_name(mut self, app_name: AppName) -> Self {
method profile_files (line 625) | pub fn profile_files(mut self, profile_files: ProfileFiles) -> Self {
method profile_name (line 664) | pub fn profile_name(mut self, profile_name: impl Into<String>) -> Self {
method account_id_endpoint_mode (line 670) | pub fn account_id_endpoint_mode(
method endpoint_url (line 697) | pub fn endpoint_url(mut self, endpoint_url: impl Into<String>) -> Self {
method use_fips (line 703) | pub fn use_fips(mut self, use_fips: bool) -> Self {
method use_dual_stack (line 709) | pub fn use_dual_stack(mut self, use_dual_stack: bool) -> Self {
method disable_request_compression (line 715) | pub fn disable_request_compression(mut self, disable_request_compressi...
method request_min_compression_size_bytes (line 721) | pub fn request_min_compression_size_bytes(mut self, size: u32) -> Self {
method stalled_stream_protection (line 751) | pub fn stalled_stream_protection(
method request_checksum_calculation (line 766) | pub fn request_checksum_calculation(
method response_checksum_validation (line 781) | pub fn response_checksum_validation(
method load (line 798) | pub async fn load(self) -> SdkConfig {
method env (line 1046) | pub(crate) fn env(mut self, env: Env) -> Self {
method fs (line 1051) | pub(crate) fn fs(mut self, fs: Fs) -> Self {
function provider_config_used (line 1076) | async fn provider_config_used() {
function base_conf (line 1131) | fn base_conf() -> ConfigLoader {
function test_origin_programmatic (line 1138) | async fn test_origin_programmatic() {
function test_origin_env (line 1160) | async fn test_origin_env() {
function test_origin_fs (line 1186) | async fn test_origin_fs() {
function load_use_fips (line 1210) | async fn load_use_fips() {
function load_dual_stack (line 1216) | async fn load_dual_stack() {
function load_disable_request_compression (line 1225) | async fn load_disable_request_compression() {
function load_request_min_compression_size_bytes (line 1234) | async fn load_request_min_compression_size_bytes() {
function app_name (line 1246) | async fn app_name() {
function request_checksum_calculation (line 1253) | async fn request_checksum_calculation() {
function response_checksum_validation (line 1265) | async fn response_checksum_validation() {
function disable_default_credentials (line 1278) | async fn disable_default_credentials() {
function identity_cache_defaulted (line 1288) | async fn identity_cache_defaulted() {
function identity_cache_old_behavior_version (line 1297) | async fn identity_cache_old_behavior_version() {
function connector_is_shared (line 1304) | async fn connector_is_shared() {
function endpoint_urls_may_be_ignored_from_env (line 1328) | async fn endpoint_urls_may_be_ignored_from_env() {
function endpoint_urls_may_be_ignored_from_profile (line 1380) | async fn endpoint_urls_may_be_ignored_from_profile() {
function programmatic_endpoint_urls_may_not_be_ignored (line 1412) | async fn programmatic_endpoint_urls_may_not_be_ignored() {
FILE: aws/rust-runtime/aws-config/src/login.rs
constant REFRESH_BUFFER_TIME (line 33) | const REFRESH_BUFFER_TIME: Duration = Duration::from_secs(5 * 60 /* 5 mi...
constant MIN_TIME_BETWEEN_REFRESH (line 34) | const MIN_TIME_BETWEEN_REFRESH: Duration = Duration::from_secs(30);
constant PROVIDER_NAME (line 35) | pub(super) const PROVIDER_NAME: &str = "Login";
type LoginCredentialsProvider (line 43) | pub struct LoginCredentialsProvider {
method builder (line 67) | pub fn builder(session_arn: impl Into<String>) -> Builder {
method resolve_token (line 75) | async fn resolve_token(&self) -> Result<LoginToken, LoginTokenError> {
method refresh_cached_token (line 138) | async fn refresh_cached_token(
method credentials (line 191) | async fn credentials(&self) -> provider::Result {
type Inner (line 49) | struct Inner {
method provide_credentials (line 208) | fn provide_credentials<'a>(&'a self) -> future::ProvideCredentials<'a>
type Builder (line 218) | pub struct Builder {
method configure (line 226) | pub fn configure(mut self, provider_config: &ProviderConfig) -> Self {
method enabled_from_profile (line 233) | pub(crate) fn enabled_from_profile(mut self, enabled: bool) -> Self {
method build (line 239) | pub fn build(self) -> LoginCredentialsProvider {
type LoginTestCase (line 290) | struct LoginTestCase {
method check (line 354) | async fn check(&self) {
type MockApiCall (line 301) | struct MockApiCall {
type MockResponse (line 310) | struct MockResponse {
type TokenOutput (line 316) | struct TokenOutput {
type AccessToken (line 324) | struct AccessToken {
type Outcome (line 332) | enum Outcome {
type TestHttpClient (line 454) | struct TestHttpClient {
method new (line 459) | fn new(mock_calls: &[MockApiCall]) -> Self {
method http_connector (line 469) | fn http_connector(
type TestHttpConnector (line 479) | struct TestHttpConnector {
method call (line 484) | fn call(&self, _request: HttpRequest) -> HttpConnectorFuture {
function run_login_tests (line 523) | async fn run_login_tests() -> Result<(), Box<dyn Error>> {
FILE: aws/rust-runtime/aws-config/src/login/cache.rs
constant LOGIN_CACHE_DIRECTORY_ENV_VAR (line 24) | const LOGIN_CACHE_DIRECTORY_ENV_VAR: &str = "AWS_LOGIN_CACHE_DIRECTORY";
function get_cache_dir (line 27) | fn get_cache_dir(env: &Env) -> Result<PathBuf, LoginTokenError> {
function cached_token_path (line 40) | fn cached_token_path(cache_dir: &Path, login_session: &str) -> PathBuf {
function load_cached_token (line 50) | pub(super) async fn load_cached_token(
function save_cached_token (line 73) | pub(super) async fn save_cached_token(
function parse_cached_token (line 135) | fn parse_cached_token(cached_token_file_contents: &[u8]) -> Result<Login...
constant TEST_CACHE_DIR (line 307) | const TEST_CACHE_DIR: &str = "/home/someuser/.aws/login/cache";
function determine_correct_cache_filenames (line 311) | fn determine_correct_cache_filenames() {
function parse_valid_token (line 328) | fn parse_valid_token() {
function parse_missing_fields (line 370) | fn parse_missing_fields() {
function load_token_from_cache (line 424) | async fn load_token_from_cache() {
function error_on_missing_file (line 463) | async fn error_on_missing_file() {
FILE: aws/rust-runtime/aws-config/src/login/dpop.rs
type Header (line 29) | pub(super) struct Header {
method to_json (line 35) | fn to_json(&self) -> String {
type Payload (line 51) | pub(super) struct Payload {
method to_json (line 58) | fn to_json(&self) -> String {
function header (line 70) | fn header(private_key: &SecretKey) -> Result<Header, LoginTokenError> {
function payload (line 87) | pub(super) fn payload(jti: String, iat: u64, htu: &str) -> Payload {
function build_message (line 95) | fn build_message(header: &Header, payload: &Payload) -> String {
function sign (line 104) | fn sign(message: &str, private_key: &SecretKey) -> Result<String, LoginT...
function calculate (line 115) | pub(super) fn calculate(
constant SCHEME_ID (line 132) | const SCHEME_ID: AuthSchemeId = AuthSchemeId::new("dpop");
type DPoPAuthSchemeOptionResolver (line 135) | pub(super) struct DPoPAuthSchemeOptionResolver;
method resolve_auth_scheme (line 138) | fn resolve_auth_scheme<'a>(
type DPoPAuthScheme (line 154) | pub(super) struct DPoPAuthScheme {
method new (line 161) | pub(super) fn new(private_key_pem: &str) -> Result<Self, LoginTokenErr...
method scheme_id (line 174) | fn scheme_id(&self) -> AuthSchemeId {
method identity_resolver (line 178) | fn identity_resolver(
method signer (line 187) | fn signer(&self) -> &dyn Sign {
type DPoPSigner (line 194) | struct DPoPSigner;
type DPoPIdentityResolver (line 200) | struct DPoPIdentityResolver(Arc<SecretKey>);
method resolve_identity (line 209) | fn resolve_identity<'a>(
method cache_location (line 218) | fn cache_location(&self) -> IdentityCacheLocation {
method cache_partition (line 222) | fn cache_partition(&self) -> Option<IdentityCachePartition> {
method sign_http_request (line 228) | fn sign_http_request(
type DPoPPrivateKey (line 252) | struct DPoPPrivateKey(Arc<SecretKey>);
constant TEST_KEY (line 259) | const TEST_KEY: &str = "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIBMB/RwQ...
function test_header_extracts_public_coordinates (line 262) | fn test_header_extracts_public_coordinates() {
function test_build_message (line 270) | fn test_build_message() {
function test_calculate_valid_key (line 304) | fn test_calculate_valid_key() {
function test_calculate_invalid_key (line 318) | fn test_calculate_invalid_key() {
FILE: aws/rust-runtime/aws-config/src/login/token.rs
type LoginToken (line 20) | pub(super) struct LoginToken {
method expires_at (line 30) | pub(super) fn expires_at(&self) -> SystemTime {
method from_refresh (line 36) | pub(super) fn from_refresh(
method fmt (line 66) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type LoginTokenError (line 79) | pub(super) enum LoginTokenError {
method other (line 104) | pub(super) fn other(
method fmt (line 116) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method from (line 163) | fn from(err: EscapeError) -> Self {
method from (line 169) | fn from(err: aws_smithy_json::deserialize::error::DeserializeError) ->...
method source (line 144) | fn source(&self) -> Option<&(dyn StdError + 'static)> {
method from (line 175) | fn from(val: LoginTokenError) -> CredentialsError {
FILE: aws/rust-runtime/aws-config/src/meta/credentials/chain.rs
type CredentialsProviderChain (line 35) | pub struct CredentialsProviderChain {
method first_try (line 56) | pub fn first_try(
method or_else (line 66) | pub fn or_else(
method or_default_provider (line 77) | pub async fn or_default_provider(self) -> Self {
method default_provider (line 86) | pub async fn default_provider() -> Self {
method credentials (line 93) | async fn credentials(&self) -> provider::Result {
method fmt (line 40) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
method provide_credentials (line 117) | fn provide_credentials<'a>(&'a self) -> future::ProvideCredentials<'a>
method fallback_on_interrupt (line 124) | fn fallback_on_interrupt(&self) -> Option<Credentials> {
type FallbackCredentials (line 148) | struct FallbackCredentials(Credentials);
method provide_credentials (line 151) | fn provide_credentials<'a>(&'a self) -> future::ProvideCredentials<'a>
method fallback_on_interrupt (line 161) | fn fallback_on_interrupt(&self) -> Option<Credentials> {
function fallback_credentials_should_be_returned_from_provider2_on_timeout_while_provider2_was_providing_credentials (line 167) | async fn fallback_credentials_should_be_returned_from_provider2_on_timeo...
function fallback_credentials_should_be_returned_from_provider2_on_timeout_while_provider1_was_providing_credentials (line 200) | async fn fallback_credentials_should_be_returned_from_provider2_on_timeo...
FILE: aws/rust-runtime/aws-config/src/meta/region.rs
type RegionProviderChain (line 31) | pub struct RegionProviderChain {
method region (line 39) | pub async fn region(&self) -> Option<Region> {
method first_try (line 53) | pub fn first_try(provider: impl ProvideRegion + 'static) -> Self {
method or_else (line 60) | pub fn or_else(mut self, fallback: impl ProvideRegion + 'static) -> Se...
method default_provider (line 66) | pub fn default_provider() -> Self {
method or_default_provider (line 71) | pub fn or_default_provider(mut self) -> Self {
type BoxFuture (line 102) | type BoxFuture<'a> = Pin<Box<dyn Future<Output = Option<Region>> + Send ...
type ProvideRegion (line 108) | pub struct ProvideRegion<'a>(NowOrLater<Option<Region>, BoxFuture<'a>>);
method region (line 79) | fn region(&self) -> future::ProvideRegion<'_> {
method region (line 85) | fn region(&self) -> future::ProvideRegion<'_> {
method region (line 136) | fn region(&self) -> future::ProvideRegion<'_>;
method region (line 140) | fn region(&self) -> future::ProvideRegion<'_> {
method region (line 146) | fn region(&self) -> future::ProvideRegion<'_> {
method region (line 152) | fn region(&self) -> future::ProvideRegion<'_> {
method region (line 158) | fn region(&self) -> future::ProvideRegion<'_> {
function new (line 111) | pub fn new(future: impl Future<Output = Option<Region>> + Send + 'a) -> ...
function ready (line 116) | pub fn ready(region: Option<Region>) -> Self {
type Output (line 122) | type Output = Option<Region>;
method poll (line 124) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
type ProvideRegion (line 134) | pub trait ProvideRegion: Send + Sync + Debug {
method region (line 79) | fn region(&self) -> future::ProvideRegion<'_> {
method region (line 85) | fn region(&self) -> future::ProvideRegion<'_> {
method region (line 136) | fn region(&self) -> future::ProvideRegion<'_>;
method region (line 140) | fn region(&self) -> future::ProvideRegion<'_> {
method region (line 146) | fn region(&self) -> future::ProvideRegion<'_> {
method region (line 152) | fn region(&self) -> future::ProvideRegion<'_> {
method region (line 158) | fn region(&self) -> future::ProvideRegion<'_> {
function provider_chain (line 170) | fn provider_chain() {
function empty_chain (line 181) | fn empty_chain() {
FILE: aws/rust-runtime/aws-config/src/meta/token.rs
type TokenProviderChain (line 41) | pub struct TokenProviderChain {
method first_try (line 47) | pub fn first_try(
method or_else (line 57) | pub fn or_else(
method or_default_provider (line 68) | pub async fn or_default_provider(self) -> Self {
method default_provider (line 77) | pub async fn default_provider() -> Self {
method token (line 84) | async fn token(&self) -> Result {
method provide_token (line 108) | fn provide_token<'a>(&'a self) -> future::ProvideToken<'a>
FILE: aws/rust-runtime/aws-config/src/profile.rs
type ErrorTakingOnceCell (line 50) | pub(super) struct ErrorTakingOnceCell<T, E> {
function new (line 55) | pub(super) fn new() -> Self {
function get_or_init (line 61) | pub(super) async fn get_or_init<F, Fut>(
type Error (line 91) | enum Error {
function taken_error (line 97) | async fn taken_error() {
function value_initialized_once (line 117) | async fn value_initialized_once() {
FILE: aws/rust-runtime/aws-config/src/profile/credentials.rs
type ProfileFileCredentialsProvider (line 146) | pub struct ProfileFileCredentialsProvider {
method builder (line 159) | pub fn builder() -> Builder {
method load_credentials (line 163) | async fn load_credentials(&self) -> provider::Result {
type Config (line 152) | struct Config {
method provide_credentials (line 209) | fn provide_credentials<'a>(&'a self) -> future::ProvideCredentials<'a>
type ProfileFileError (line 220) | pub enum ProfileFileError {
method missing_field (line 310) | fn missing_field(profile: &Profile, field: &'static str) -> Self {
method source (line 319) | fn source(&self) -> Option<&(dyn Error + 'static)> {
method fmt (line 328) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type Builder (line 386) | pub struct Builder {
method configure (line 408) | pub fn configure(mut self, provider_config: &ProviderConfig) -> Self {
method with_custom_provider (line 440) | pub fn with_custom_provider(
method profile_name (line 451) | pub fn profile_name(mut self, profile_name: impl Into<String>) -> Self {
method profile_files (line 458) | pub fn profile_files(mut self, profile_files: ProfileFiles) -> Self {
method build (line 464) | pub fn build(self) -> ProfileFileCredentialsProvider {
function build_provider_chain (line 511) | async fn build_provider_chain(
type ChainProvider (line 525) | struct ChainProvider {
method provide_credentials (line 531) | async fn provide_credentials(&self) -> Result<Credentials, Credentials...
type ClientInner (line 656) | struct ClientInner {
method call (line 660) | fn call(&self, request: HttpRequest) -> HttpConnectorFuture {
type Client (line 672) | struct Client {
method new (line 676) | fn new(expected_token: &'static str) -> Self {
method http_connector (line 683) | fn http_connector(
function create_test_fs (line 692) | fn create_test_fs() -> Fs {
function create_inner_provider_exactly_once (line 735) | async fn create_inner_provider_exactly_once() {
function credential_feature (line 788) | async fn credential_feature() {
type TestClientInner (line 829) | struct TestClientInner {
method call (line 835) | fn call(&self, _request: HttpRequest) -> HttpConnectorFuture {
type TestClient (line 852) | struct TestClient {
method new_success (line 858) | fn new_success() -> Self {
method new_error (line 879) | fn new_error() -> Self {
method call_count (line 891) | fn call_count(&self) -> usize {
method http_connector (line 897) | fn http_connector(
function create_test_fs_unexpired (line 906) | fn create_test_fs_unexpired() -> Fs {
function create_test_fs_expired (line 940) | fn create_test_fs_expired() -> Fs {
function unexpired_credentials_no_refresh (line 976) | async fn unexpired_credentials_no_refresh() {
function expired_credentials_trigger_refresh (line 996) | async fn expired_credentials_trigger_refresh() {
function refresh_error_propagates (line 1016) | async fn refresh_error_propagates() {
FILE: aws/rust-runtime/aws-config/src/profile/credentials/exec.rs
type AssumeRoleProvider (line 26) | pub(super) struct AssumeRoleProvider {
method credentials (line 34) | pub(super) async fn credentials(
type ProviderChain (line 64) | pub(super) struct ProviderChain {
method base (line 70) | pub(crate) fn base(&self) -> &dyn ProvideCredentials {
method chain (line 74) | pub(crate) fn chain(&self) -> &[AssumeRoleProvider] {
method from_repr (line 80) | pub(super) fn from_repr(
type NamedProviderFactory (line 227) | pub(crate) struct NamedProviderFactory {
method new (line 239) | pub(crate) fn new(
method provider (line 249) | pub(crate) fn provider(&self, name: &str) -> Option<Arc<dyn ProvideCre...
function lower_cow (line 231) | fn lower_cow(mut input: Cow<'_, str>) -> Cow<'_, str> {
function providers_case_insensitive (line 268) | fn providers_case_insensitive() {
function error_on_unknown_provider (line 282) | fn error_on_unknown_provider() {
FILE: aws/rust-runtime/aws-config/src/profile/credentials/repr.rs
type ProfileChain (line 29) | pub(crate) struct ProfileChain<'a> {
function base (line 35) | pub(crate) fn base(&self) -> &BaseProvider<'a> {
function chain (line 39) | pub(crate) fn chain(&self) -> &[RoleArn<'a>] {
type BaseProvider (line 50) | pub(crate) enum BaseProvider<'a> {
type RoleArn (line 116) | pub(crate) struct RoleArn<'a> {
function resolve_chain (line 127) | pub(crate) fn resolve_chain(
constant ROLE_ARN (line 222) | pub(super) const ROLE_ARN: &str = "role_arn";
constant EXTERNAL_ID (line 223) | pub(super) const EXTERNAL_ID: &str = "external_id";
constant SESSION_NAME (line 224) | pub(super) const SESSION_NAME: &str = "role_session_name";
constant CREDENTIAL_SOURCE (line 226) | pub(super) const CREDENTIAL_SOURCE: &str = "credential_source";
constant SOURCE_PROFILE (line 227) | pub(super) const SOURCE_PROFILE: &str = "source_profile";
constant ACCOUNT_ID (line 231) | pub(super) const ACCOUNT_ID: &str = "sso_account_id";
constant REGION (line 232) | pub(super) const REGION: &str = "sso_region";
constant ROLE_NAME (line 233) | pub(super) const ROLE_NAME: &str = "sso_role_name";
constant START_URL (line 234) | pub(super) const START_URL: &str = "sso_start_url";
constant SESSION_NAME (line 235) | pub(super) const SESSION_NAME: &str = "sso_session";
constant TOKEN_FILE (line 239) | pub(super) const TOKEN_FILE: &str = "web_identity_token_file";
constant AWS_ACCESS_KEY_ID (line 243) | pub(super) const AWS_ACCESS_KEY_ID: &str = "aws_access_key_id";
constant AWS_SECRET_ACCESS_KEY (line 244) | pub(super) const AWS_SECRET_ACCESS_KEY: &str = "aws_secret_access_key";
constant AWS_SESSION_TOKEN (line 245) | pub(super) const AWS_SESSION_TOKEN: &str = "aws_session_token";
constant AWS_ACCOUNT_ID (line 246) | pub(super) const AWS_ACCOUNT_ID: &str = "aws_account_id";
constant CREDENTIAL_PROCESS (line 250) | pub(super) const CREDENTIAL_PROCESS: &str = "credential_process";
constant LOGIN_SESSION (line 254) | pub(super) const LOGIN_SESSION: &str = "login_session";
constant PROVIDER_NAME (line 257) | const PROVIDER_NAME: &str = "ProfileFile";
function base_provider (line 259) | fn base_provider<'a>(
type NextProfile (line 274) | enum NextProfile<'a> {
function chain_provider (line 279) | fn chain_provider(profile: &Profile) -> Result<NextProfile<'_>, ProfileF...
function role_arn_from_profile (line 306) | fn role_arn_from_profile(profile: &Profile) -> Option<RoleArn<'_>> {
function sso_from_profile (line 321) | fn sso_from_profile<'a>(
function web_identity_token_from_profile (line 410) | fn web_identity_token_from_profile(
function static_creds_from_profile (line 440) | fn static_creds_from_profile(profile: &Profile) -> Result<Credentials, P...
function credential_process_from_profile (line 477) | fn credential_process_from_profile(
function login_session_from_profile (line 498) | fn login_session_from_profile(
function run_test_cases (line 519) | fn run_test_cases() -> Result<(), Box<dyn std::error::Error>> {
function check (line 532) | fn check(test_case: TestCase) {
type TestCase (line 563) | struct TestCase {
type TestInput (line 571) | struct TestInput {
function to_test_output (line 579) | fn to_test_output(profile_chain: ProfileChain<'_>) -> Vec<Provider> {
type TestOutput (line 636) | enum TestOutput {
type Provider (line 643) | enum Provider {
function base_provider_process_credentials_args_redaction (line 679) | fn base_provider_process_credentials_args_redaction() {
FILE: aws/rust-runtime/aws-config/src/profile/parser.rs
function load (line 53) | pub async fn load(
FILE: aws/rust-runtime/aws-config/src/profile/profile_file.rs
type ProfileFiles (line 13) | pub type ProfileFiles = aws_runtime::env_config::file::EnvConfigFiles;
type Builder (line 17) | pub type Builder = aws_runtime::env_config::file::Builder;
type ProfileFileKind (line 24) | pub type ProfileFileKind = aws_runtime::env_config::file::EnvConfigFileK...
FILE: aws/rust-runtime/aws-config/src/profile/region.rs
type ProfileFileRegionProvider (line 40) | pub struct ProfileFileRegionProvider {
method new (line 89) | pub fn new() -> Self {
method builder (line 96) | pub fn builder() -> Builder {
method region (line 100) | async fn region(&self) -> Option<Region> {
type Builder (line 46) | pub struct Builder {
method configure (line 55) | pub fn configure(mut self, config: &ProviderConfig) -> Self {
method profile_name (line 61) | pub fn profile_name(mut self, profile_name: impl Into<String>) -> Self {
method profile_files (line 68) | pub fn profile_files(mut self, profile_files: ProfileFiles) -> Self {
method build (line 74) | pub fn build(self) -> ProfileFileRegionProvider {
function resolve_profile_chain_for_region (line 107) | fn resolve_profile_chain_for_region(profile_set: &'_ ProfileSet) -> Opti...
method region (line 154) | fn region(&self) -> future::ProvideRegion<'_> {
function provider_config (line 169) | fn provider_config(dir_name: &str) -> ProviderConfig {
function load_region (line 180) | fn load_region() {
function load_region_env_profile_override (line 191) | fn load_region_env_profile_override() {
function load_region_nonexistent_profile (line 206) | fn load_region_nonexistent_profile() {
function load_region_explicit_override (line 218) | fn load_region_explicit_override() {
function load_region_from_source_profile (line 231) | async fn load_region_from_source_profile() {
FILE: aws/rust-runtime/aws-config/src/profile/token.rs
function load_profile_set (line 19) | async fn load_profile_set(provider_config: &ProviderConfig) -> Result<&P...
function create_token_provider (line 26) | fn create_token_provider(
type ProfileFileTokenProvider (line 79) | pub struct ProfileFileTokenProvider {
method builder (line 87) | pub fn builder() -> Builder {
method load_token (line 91) | async fn load_token(&self) -> TokenResult {
method provide_token (line 114) | fn provide_token<'a>(&'a self) -> future::ProvideToken<'a>
type Builder (line 124) | pub struct Builder {
method configure (line 133) | pub(crate) fn configure(mut self, provider_config: &ProviderConfig) ->...
method profile_name (line 139) | pub fn profile_name(mut self, profile_name: impl Into<String>) -> Self {
method profile_files (line 146) | pub fn profile_files(mut self, profile_files: ProfileFiles) -> Self {
method build (line 152) | pub fn build(self) -> ProfileFileTokenProvider {
FILE: aws/rust-runtime/aws-config/src/provider_config.rs
type ProviderConfig (line 37) | pub struct ProviderConfig {
method no_configuration (line 99) | pub fn no_configuration() -> Self {
method without_region (line 145) | pub fn without_region() -> Self {
method empty (line 150) | pub fn empty() -> Self {
method init (line 169) | pub(crate) fn init(
method with_default_region (line 202) | pub async fn with_default_region() -> Self {
method client_config (line 212) | pub(crate) fn client_config(&self) -> SdkConfig {
method env (line 239) | pub(crate) fn env(&self) -> Env {
method fs (line 244) | pub(crate) fn fs(&self) -> Fs {
method time_source (line 249) | pub(crate) fn time_source(&self) -> SharedTimeSource {
method http_client (line 254) | pub(crate) fn http_client(&self) -> Option<SharedHttpClient> {
method retry_config (line 259) | pub(crate) fn retry_config(&self) -> Option<RetryConfig> {
method sleep_impl (line 264) | pub(crate) fn sleep_impl(&self) -> Option<SharedAsyncSleep> {
method region (line 269) | pub(crate) fn region(&self) -> Option<Region> {
method use_fips (line 274) | pub(crate) fn use_fips(&self) -> Option<bool> {
method use_dual_stack (line 279) | pub(crate) fn use_dual_stack(&self) -> Option<bool> {
method try_profile (line 283) | pub(crate) async fn try_profile(&self) -> Result<&ProfileSet, &Profile...
method profile (line 303) | pub(crate) async fn profile(&self) -> Option<&ProfileSet> {
method with_region (line 308) | pub fn with_region(mut self, region: Option<Region>) -> Self {
method with_use_fips (line 325) | pub fn with_use_fips(mut self, use_fips: Option<bool>) -> Self {
method with_use_dual_stack (line 337) | pub fn with_use_dual_stack(mut self, use_dual_stack: Option<bool>) -> ...
method with_profile_name (line 342) | pub(crate) fn with_profile_name(self, profile_name: String) -> Self {
method with_profile_config (line 349) | pub(crate) fn with_profile_config(
method load_default_region (line 373) | pub async fn load_default_region(self) -> Self {
method with_fs (line 379) | pub(crate) fn with_fs(self, fs: Fs) -> Self {
method with_env (line 387) | pub(crate) fn with_env(self, env: Env) -> Self {
method with_time_source (line 396) | pub fn with_time_source(self, time_source: impl TimeSource + 'static) ...
method with_http_client (line 404) | pub fn with_http_client(self, http_client: impl HttpClient + 'static) ...
method with_sleep_impl (line 412) | pub fn with_sleep_impl(self, sleep_impl: impl AsyncSleep + 'static) ->...
method with_retry_config (line 420) | pub fn with_retry_config(self, retry_config: RetryConfig) -> Self {
method fmt (line 57) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
method default (line 74) | fn default() -> Self {
FILE: aws/rust-runtime/aws-config/src/retry.rs
type RetryConfigErrorKind (line 25) | pub(crate) enum RetryConfigErrorKind {
type RetryConfigError (line 42) | pub struct RetryConfigError {
method fmt (line 47) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method source (line 64) | fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
method from (line 75) | fn from(kind: RetryConfigErrorKind) -> Self {
FILE: aws/rust-runtime/aws-config/src/sensitive_command.rs
type CommandWithSensitiveArgs (line 9) | pub(crate) struct CommandWithSensitiveArgs<T>(T);
function new (line 15) | pub(crate) fn new(value: T) -> Self {
function to_owned_string (line 20) | pub(crate) fn to_owned_string(&self) -> CommandWithSensitiveArgs<String> {
function unredacted (line 25) | pub(crate) fn unredacted(&self) -> &str {
function fmt (line 34) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function fmt (line 48) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
FILE: aws/rust-runtime/aws-config/src/sso/cache.rs
type CachedSsoToken (line 24) | pub(super) struct CachedSsoToken {
method refreshable (line 39) | pub(super) fn refreshable(&self) -> bool {
method fmt (line 48) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type CachedSsoTokenError (line 63) | pub(super) enum CachedSsoTokenError {
method fmt (line 83) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method from (line 116) | fn from(err: EscapeError) -> Self {
method from (line 122) | fn from(err: aws_smithy_json::deserialize::error::DeserializeError) ->...
method from (line 128) | fn from(value: DateTimeFormatError) -> Self {
method source (line 102) | fn source(&self) -> Option<&(dyn StdError + 'static)> {
function cached_token_path (line 138) | fn cached_token_path(identifier: &str, home: &str) -> PathBuf {
function load_cached_token (line 151) | pub(super) async fn load_cached_token(
function parse_cached_token (line 169) | fn parse_cached_token(
function json_parse_loop (line 271) | fn json_parse_loop<'a>(
function save_cached_token (line 307) | pub(super) async fn save_cached_token(
function redact_fields_in_token_debug (line 364) | fn redact_fields_in_token_debug() {
function parse_valid_token (line 381) | fn parse_valid_token() {
function parse_valid_token_with_optional_fields_absent (line 430) | fn parse_valid_token_with_optional_fields_absent() {
function parse_invalid_timestamp (line 450) | fn parse_invalid_timestamp() {
function parse_missing_fields (line 468) | fn parse_missing_fields() {
function gracefully_handle_missing_files (line 499) | async fn gracefully_handle_missing_files() {
function determine_correct_cache_filenames (line 517) | fn determine_correct_cache_filenames() {
function save_cached_token (line 539) | async fn save_cached_token() {
function round_trip_token (line 571) | async fn round_trip_token() {
FILE: aws/rust-runtime/aws-config/src/sso/credentials.rs
type SsoCredentialsProvider (line 37) | pub struct SsoCredentialsProvider {
method builder (line 48) | pub fn builder() -> Builder {
method new (line 52) | pub(crate) fn new(
method credentials (line 82) | async fn credentials(&self) -> provider::Result {
method provide_credentials (line 102) | fn provide_credentials<'a>(&'a self) -> future::ProvideCredentials<'a>
type Builder (line 112) | pub struct Builder {
method new (line 123) | pub fn new() -> Self {
method configure (line 128) | pub fn configure(mut self, provider_config: &ProviderConfig) -> Self {
method account_id (line 136) | pub fn account_id(mut self, account_id: impl Into<String>) -> Self {
method set_account_id (line 144) | pub fn set_account_id(&mut self, account_id: Option<String>) -> &mut S...
method region (line 152) | pub fn region(mut self, region: Region) -> Self {
method set_region (line 160) | pub fn set_region(&mut self, region: Option<Region>) -> &mut Self {
method role_name (line 168) | pub fn role_name(mut self, role_name: impl Into<String>) -> Self {
method set_role_name (line 176) | pub fn set_role_name(&mut self, role_name: Option<String>) -> &mut Self {
method start_url (line 184) | pub fn start_url(mut self, start_url: impl Into<String>) -> Self {
method set_start_url (line 192) | pub fn set_start_url(&mut self, start_url: Option<String>) -> &mut Self {
method session_name (line 198) | pub fn session_name(mut self, session_name: impl Into<String>) -> Self {
method set_session_name (line 204) | pub fn set_session_name(&mut self, session_name: Option<String>) -> &m...
method build (line 217) | pub fn build(self) -> SsoCredentialsProvider {
type SsoProviderConfig (line 231) | pub(crate) struct SsoProviderConfig {
function load_sso_credentials (line 239) | async fn load_sso_credentials(
FILE: aws/rust-runtime/aws-config/src/sso/token.rs
constant REFRESH_BUFFER_TIME (line 39) | const REFRESH_BUFFER_TIME: Duration = Duration::from_secs(5 * 60 /* 5 mi...
constant MIN_TIME_BETWEEN_REFRESH (line 40) | const MIN_TIME_BETWEEN_REFRESH: Duration = Duration::from_secs(30);
type SsoTokenProvider (line 49) | pub struct SsoTokenProvider {
method builder (line 67) | pub fn builder() -> Builder {
method refresh_cached_token (line 71) | async fn refresh_cached_token(
method resolve_token (line 152) | pub(super) fn resolve_token(
type Inner (line 55) | struct Inner {
method provide_token (line 231) | fn provide_token<'a>(&'a self) -> ProvideTokenFuture<'a>
method resolve_identity (line 252) | fn resolve_identity<'a>(
type Builder (line 268) | pub struct Builder {
method new (line 277) | pub fn new() -> Self {
method configure (line 282) | pub fn configure(mut self, sdk_config: &SdkConfig) -> Self {
method region (line 290) | pub fn region(mut self, region: impl Into<Region>) -> Self {
method set_region (line 298) | pub fn set_region(&mut self, region: Option<Region>) -> &mut Self {
method session_name (line 306) | pub fn session_name(mut self, session_name: impl Into<String>) -> Self {
method set_session_name (line 314) | pub fn set_session_name(&mut self, session_name: Option<String>) -> &m...
method start_url (line 322) | pub fn start_url(mut self, start_url: impl Into<String>) -> Self {
method set_start_url (line 330) | pub fn set_start_url(&mut self, start_url: Option<String>) -> &mut Self {
method build (line 340) | pub async fn build(mut self) -> SsoTokenProvider {
method build_with (line 347) | pub(crate) fn build_with(self, env: Env, fs: Fs) -> SsoTokenProvider {
type SsoTokenProviderError (line 364) | pub(super) enum SsoTokenProviderError {
method fmt (line 373) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method from (line 395) | fn from(source: CachedSsoTokenError) -> Self {
method cause (line 385) | fn cause(&self) -> Option<&dyn StdError> {
function time (line 420) | fn time(s: &str) -> SystemTime {
type TestHarness (line 424) | struct TestHarness {
method new (line 432) | fn new(
method expect_sso_token (line 461) | async fn expect_sso_token(&self, value: &str, expires_at: &str) -> Cac...
method expect_token (line 472) | async fn expect_token(&self, value: &str, expires_at: &str) {
method expect_expired_token_err (line 488) | async fn expect_expired_token_err(&self) {
method last_refresh_attempt_time (line 500) | fn last_refresh_attempt_time(&self) -> Option<String> {
function use_unexpired_cached_token (line 518) | async fn use_unexpired_cached_token() {
function expired_cached_token (line 543) | async fn expired_cached_token() {
function expired_token_and_expired_client_registration (line 566) | async fn expired_token_and_expired_client_registration() {
function expired_token_refresh_with_refresh_token (line 595) | async fn expired_token_refresh_with_refresh_token() {
function expired_token_refresh_fails (line 679) | async fn expired_token_refresh_fails() {
function expired_token_refresh_without_new_refresh_token (line 721) | async fn expired_token_refresh_without_new_refresh_token() {
function refresh_timings (line 772) | async fn refresh_timings() {
FILE: aws/rust-runtime/aws-config/src/sts/assume_role.rs
type AssumeRoleProvider (line 71) | pub struct AssumeRoleProvider {
method builder (line 88) | pub fn builder(role: impl Into<String>) -> AssumeRoleProviderBuilder {
type Inner (line 76) | struct Inner {
method credentials (line 313) | async fn credentials(&self) -> provider::Result {
type AssumeRoleProviderBuilder (line 97) | pub struct AssumeRoleProviderBuilder {
method new (line 117) | pub fn new(role: impl Into<String>) -> Self {
method external_id (line 136) | pub fn external_id(mut self, id: impl Into<String>) -> Self {
method session_name (line 147) | pub fn session_name(mut self, name: impl Into<String>) -> Self {
method policy (line 157) | pub fn policy(mut self, policy: impl Into<String>) -> Self {
method policy_arns (line 167) | pub fn policy_arns(mut self, policy_arns: Vec<String>) -> Self {
method session_length (line 189) | pub fn session_length(mut self, length: Duration) -> Self {
method region (line 198) | pub fn region(mut self, region: Region) -> Self {
method tags (line 207) | pub fn tags<K, V>(mut self, tags: impl IntoIterator<Item = (K, V)>) ->...
method configure (line 245) | pub fn configure(mut self, conf: &SdkConfig) -> Self {
method build (line 254) | pub async fn build(self) -> AssumeRoleProvider {
method build_from_provider (line 295) | pub async fn build_from_provider(
method provide_credentials (line 357) | fn provide_credentials<'a>(&'a self) -> future::ProvideCredentials<'a>
function configures_session_length (line 390) | async fn configures_session_length() {
function loads_region_from_sdk_config (line 417) | async fn loads_region_from_sdk_config() {
function build_method_from_sdk_config (line 447) | async fn build_method_from_sdk_config() {
function create_test_http_client (line 483) | fn create_test_http_client() -> StaticReplayClient {
function provider_does_not_cache_credentials_by_default (line 497) | async fn provider_does_not_cache_credentials_by_default() {
function credentials_feature (line 558) | async fn credentials_feature() {
FILE: aws/rust-runtime/aws-config/src/sts/util.rs
function into_credentials (line 14) | pub(crate) fn into_credentials(
function default_session_name (line 43) | pub(crate) fn default_session_name(base: &str, ts: SystemTime) -> String {
function parse_account_id (line 54) | fn parse_account_id(arn: &str) -> Result<AccountId, CredentialsError> {
FILE: aws/rust-runtime/aws-config/src/test_case.rs
type Secrets (line 28) | pub(crate) trait Secrets {
method secrets (line 29) | fn secrets(&self) -> Vec<String>;
method secrets (line 32) | fn secrets(&self) -> Vec<String> {
method secrets (line 53) | fn secrets(&self) -> Vec<String> {
method secrets (line 94) | fn secrets(&self) -> Vec<String> {
type Credentials (line 44) | pub(crate) struct Credentials {
method from (line 63) | fn from(credentials: &aws_credential_types::Credentials) -> Self {
method from (line 77) | fn from(credentials: aws_credential_types::Credentials) -> Self {
type Token (line 88) | pub(crate) struct Token {
method from (line 100) | fn from(value: &aws_credential_types::Token) -> Self {
method from (line 111) | fn from(value: aws_credential_types::Token) -> Self {
function no_traffic_client (line 117) | pub(crate) fn no_traffic_client() -> SharedHttpClient {
type InstantSleep (line 122) | pub(crate) struct InstantSleep;
method sleep (line 124) | fn sleep(&self, _duration: Duration) -> Sleep {
type GenericTestResult (line 130) | pub(crate) enum GenericTestResult<T> {
function assert_matches (line 140) | pub(crate) fn assert_matches<E>(&self, result: Result<&O, &E>)
type Metadata (line 171) | pub(crate) struct Metadata<T> {
type RunTestProvider (line 177) | pub(crate) trait RunTestProvider {
method run_provider (line 181) | fn run_provider(
type Output (line 205) | type Output = O;
type Error (line 206) | type Error = E;
method run_provider (line 208) | fn run_provider(
type ResultFuture (line 187) | type ResultFuture<O, E> = Pin<Box<dyn Future<Output = Result<O, E>> + Se...
type StaticTestProvider (line 188) | pub(crate) struct StaticTestProvider<O, E> {
function new (line 192) | pub(crate) fn new<F>(run_provider_fn: F) -> Self
function test_credentials_provider (line 216) | pub(crate) fn test_credentials_provider<F, Fut, E>(
function test_token_provider (line 230) | pub(crate) fn test_token_provider<F, Fut, E>(
type TestEnvironment (line 250) | pub(crate) struct TestEnvironment<O, E> {
function from_dir (line 262) | pub(crate) async fn from_dir(
function map_provider_config (line 306) | pub(crate) fn map_provider_config<F>(mut self, provider_config_builder: ...
function provider_config (line 314) | pub(crate) fn provider_config(&self) -> &ProviderConfig {
function execute_from_live_traffic (line 329) | pub(crate) async fn execute_from_live_traffic(&self) {
function execute_and_update (line 358) | pub(crate) async fn execute_and_update(&self) {
function execute (line 374) | pub(crate) async fn execute(&self) -> Result<O, E> {
function log_info (line 414) | fn log_info(&self) {
function lines_with_secrets (line 418) | fn lines_with_secrets<'a>(&'a self, logs: &'a str) -> Vec<&'a str> {
function contains_any_secrets (line 424) | fn contains_any_secrets(&self, log_line: &str) -> bool {
function check_results (line 437) | fn check_results(&self, result: Result<&O, &E>)
FILE: aws/rust-runtime/aws-config/src/web_identity_token.rs
constant ENV_VAR_TOKEN_FILE (line 76) | const ENV_VAR_TOKEN_FILE: &str = "AWS_WEB_IDENTITY_TOKEN_FILE";
constant ENV_VAR_ROLE_ARN (line 77) | const ENV_VAR_ROLE_ARN: &str = "AWS_ROLE_ARN";
constant ENV_VAR_SESSION_NAME (line 78) | const ENV_VAR_SESSION_NAME: &str = "AWS_ROLE_SESSION_NAME";
type WebIdentityTokenCredentialsProvider (line 84) | pub struct WebIdentityTokenCredentialsProvider {
method builder (line 95) | pub fn builder() -> Builder {
method source (line 129) | fn source(&self) -> Result<Cow<'_, StaticConfiguration>, CredentialsEr...
method credentials (line 152) | async fn credentials(&self) -> provider::Result {
type Source (line 101) | enum Source {
type StaticConfiguration (line 108) | pub struct StaticConfiguration {
method provide_credentials (line 120) | fn provide_credentials<'a>(&'a self) -> future::ProvideCredentials<'a>
type Builder (line 175) | pub struct Builder {
method configure (line 195) | pub fn configure(mut self, provider_config: &ProviderConfig) -> Self {
method static_configuration (line 205) | pub fn static_configuration(mut self, config: StaticConfiguration) -> ...
method policy (line 215) | pub fn policy(mut self, policy: impl Into<String>) -> Self {
method policy_arns (line 225) | pub fn policy_arns(mut self, policy_arns: Vec<String>) -> Self {
method build (line 240) | pub fn build(self) -> WebIdentityTokenCredentialsProvider {
function load_credentials (line 254) | async fn load_credentials(
function unloaded_provider (line 301) | async fn unloaded_provider() {
function missing_env_var (line 321) | async fn missing_env_var() {
function fs_missing_file (line 349) | async fn fs_missing_file() {
FILE: aws/rust-runtime/aws-credential-types/src/attributes.rs
type AccountId (line 10) | pub struct AccountId {
method as_str (line 16) | pub fn as_str(&self) -> &str {
method from (line 25) | fn from(value: T) -> Self {
function account_id_creation (line 37) | fn account_id_creation() {
FILE: aws/rust-runtime/aws-credential-types/src/credential_feature.rs
type AwsCredentialFeature (line 11) | pub enum AwsCredentialFeature {
type Storer (line 61) | type Storer = StoreAppend<Self>;
FILE: aws/rust-runtime/aws-credential-types/src/credential_fn.rs
type ProvideCredentialsFn (line 18) | pub struct ProvideCredentialsFn<'c, T> {
method fmt (line 24) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
method provide_credentials (line 34) | fn provide_credentials<'a>(&'a self) -> future::ProvideCredentials<'a>
function provide_credentials_fn (line 62) | pub fn provide_credentials_fn<'c, T, F>(f: T) -> ProvideCredentialsFn<'c...
function assert_send_sync (line 78) | fn assert_send_sync<T: Send + Sync>() {}
function creds_are_send_sync (line 81) | fn creds_are_send_sync() {
function provide_credentials_fn_closure_can_borrow (line 87) | async fn provide_credentials_fn_closure_can_borrow() {
FILE: aws/rust-runtime/aws-credential-types/src/credentials_impl.rs
type Credentials (line 29) | pub struct Credentials(Arc<Inner>, HashMap<TypeId, TypeErasedBox>);
method builder (line 111) | pub fn builder() -> CredentialsBuilder {
method new (line 119) | pub fn new(
method from_keys (line 181) | pub fn from_keys(
method access_key_id (line 196) | pub fn access_key_id(&self) -> &str {
method secret_access_key (line 201) | pub fn secret_access_key(&self) -> &str {
method expiry (line 206) | pub fn expiry(&self) -> Option<SystemTime> {
method expiry_mut (line 211) | pub fn expiry_mut(&mut self) -> &mut Option<SystemTime> {
method account_id (line 216) | pub fn account_id(&self) -> Option<&AccountId> {
method session_token (line 221) | pub fn session_token(&self) -> Option<&str> {
method set_property (line 227) | pub fn set_property<T: Any + Clone + Debug + Send + Sync + 'static>(&m...
method get_property (line 234) | pub fn get_property<T: Any + Debug + Send + Sync + 'static>(&self) -> ...
method get_property_mut (line 242) | pub fn get_property_mut<T: Any + Debug + Send + Sync + 'static>(&mut s...
method get_property_mut_or_default (line 251) | pub fn get_property_mut_or_default<T: Any + Clone + Debug + Default + ...
method for_tests (line 354) | pub fn for_tests() -> Self {
method for_tests_with_session_token (line 365) | pub fn for_tests_with_session_token() -> Self {
method clone (line 32) | fn clone(&self) -> Self {
method eq (line 47) | fn eq(&self, other: &Credentials) -> bool {
type Inner (line 55) | struct Inner {
method fmt (line 77) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
constant STATIC_CREDENTIALS (line 107) | const STATIC_CREDENTIALS: &str = "Static";
type CredentialsBuilder (line 268) | pub struct CredentialsBuilder {
method access_key_id (line 279) | pub fn access_key_id(mut self, access_key_id: impl Into<String>) -> Se...
method secret_access_key (line 285) | pub fn secret_access_key(mut self, secret_access_key: impl Into<String...
method session_token (line 291) | pub fn session_token(mut self, session_token: impl Into<String>) -> Se...
method set_session_token (line 297) | pub fn set_session_token(&mut self, session_token: Option<String>) {
method expiry (line 302) | pub fn expiry(mut self, expiry: SystemTime) -> Self {
method set_expiry (line 308) | pub fn set_expiry(&mut self, expiry: Option<SystemTime>) {
method account_id (line 313) | pub fn account_id(mut self, account_id: impl Into<AccountId>) -> Self {
method set_account_id (line 319) | pub fn set_account_id(&mut self, account_id: Option<AccountId>) {
method provider_name (line 324) | pub fn provider_name(mut self, provider_name: &'static str) -> Self {
method build (line 330) | pub fn build(self) -> Credentials {
method for_tests (line 380) | pub fn for_tests() -> Self {
method from (line 389) | fn from(val: Credentials) -> Self {
function debug_impl (line 425) | fn debug_impl() {
function equality_ignores_properties (line 455) | fn equality_ignores_properties() {
function identity_inherits_feature_properties (line 469) | fn identity_inherits_feature_properties() {
function from_credentials_adds_resolved_account_id_feature (line 497) | fn from_credentials_adds_resolved_account_id_feature() {
FILE: aws/rust-runtime/aws-credential-types/src/lib.rs
type Token (line 39) | pub type Token = aws_smithy_runtime_api::client::identity::http::Token;
FILE: aws/rust-runtime/aws-credential-types/src/provider/credentials.rs
type Result (line 83) | pub type Result = std::result::Result<Credentials, super::error::Credent...
type ProvideCredentials (line 86) | pub trait ProvideCredentials: Send + Sync + std::fmt::Debug {
method provide_credentials (line 88) | fn provide_credentials<'a>(&'a self) -> super::future::ProvideCredenti...
method fallback_on_interrupt (line 101) | fn fallback_on_interrupt(&self) -> Option<Credentials> {
method provide_credentials (line 107) | fn provide_credentials<'a>(&'a self) -> super::future::ProvideCredenti...
method provide_credentials (line 116) | fn provide_credentials<'a>(&'a self) -> super::future::ProvideCredenti...
method provide_credentials (line 154) | fn provide_credentials<'a>(&'a self) -> super::future::ProvideCredenti...
type SharedCredentialsProvider (line 129) | pub struct SharedCredentialsProvider(Arc<dyn ProvideCredentials>, Identi...
method new (line 136) | pub fn new(provider: impl ProvideCredentials + 'static) -> Self {
method as_ref (line 142) | fn as_ref(&self) -> &(dyn ProvideCredentials + 'static) {
method from (line 148) | fn from(provider: Arc<dyn ProvideCredentials>) -> Self {
type Storer (line 163) | type Storer = StoreReplace<SharedCredentialsProvider>;
method resolve_identity (line 167) | fn resolve_identity<'a>(
method fallback_on_interrupt (line 175) | fn fallback_on_interrupt(&self) -> Option<Identity> {
method cache_partition (line 179) | fn cache_partition(&self) -> Option<IdentityCachePartition> {
function reuses_cache_partition (line 195) | fn reuses_cache_partition() {
function account_id_can_be_retrieved_from_identity (line 208) | async fn account_id_can_be_retrieved_from_identity() {
FILE: aws/rust-runtime/aws-credential-types/src/provider/error.rs
type CredentialsNotLoaded (line 14) | pub struct CredentialsNotLoaded {
type ProviderTimedOut (line 20) | pub struct ProviderTimedOut {
method timeout_duration (line 26) | pub fn timeout_duration(&self) -> Duration {
type InvalidConfiguration (line 33) | pub struct InvalidConfiguration {
type ProviderError (line 39) | pub struct ProviderError {
type Unhandled (line 45) | pub struct Unhandled {
type CredentialsError (line 52) | pub enum CredentialsError {
method not_loaded (line 87) | pub fn not_loaded(source: impl Into<Box<dyn Error + Send + Sync + 'sta...
method not_loaded_no_source (line 98) | pub fn not_loaded_no_source() -> Self {
method unhandled (line 106) | pub fn unhandled(source: impl Into<Box<dyn Error + Send + Sync + 'stat...
method provider_error (line 116) | pub fn provider_error(source: impl Into<Box<dyn Error + Send + Sync + ...
method invalid_configuration (line 123) | pub fn invalid_configuration(
method provider_timed_out (line 132) | pub fn provider_timed_out(timeout_duration: Duration) -> Self {
method fmt (line 138) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method source (line 162) | fn source(&self) -> Option<&(dyn Error + 'static)> {
type TokenNotLoaded (line 177) | pub struct TokenNotLoaded {
type TokenError (line 183) | pub enum TokenError {
method not_loaded (line 213) | pub fn not_loaded(source: impl Into<Box<dyn Error + Send + Sync + 'sta...
method unhandled (line 223) | pub fn unhandled(source: impl Into<Box<dyn Error + Send + Sync + 'stat...
method provider_error (line 230) | pub fn provider_error(source: impl Into<Box<dyn Error + Send + Sync + ...
method invalid_configuration (line 237) | pub fn invalid_configuration(
method provider_timed_out (line 246) | pub fn provider_timed_out(timeout_duration: Duration) -> Self {
method fmt (line 252) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method source (line 276) | fn source(&self) -> Option<&(dyn Error + 'static)> {
FILE: aws/rust-runtime/aws-credential-types/src/provider/future.rs
type BoxFuture (line 15) | type BoxFuture<'a, T> = Pin<Box<dyn Future<Output = T> + Send + 'a>>;
type ProvideCredentials (line 19) | pub struct ProvideCredentials<'a>(NowOrLater<CredsResult, BoxFuture<'a, ...
function new (line 23) | pub fn new(future: impl Future<Output = CredsResult> + Send + 'a) -> Self {
function ready (line 28) | pub fn ready(credentials: CredsResult) -> Self {
type Output (line 34) | type Output = CredsResult;
method poll (line 36) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
type ProvideToken (line 43) | pub struct ProvideToken<'a>(NowOrLater<TokenResult, BoxFuture<'a, TokenR...
function new (line 47) | pub fn new(future: impl Future<Output = TokenResult> + Send + 'a) -> Self {
function ready (line 52) | pub fn ready(credentials: TokenResult) -> Self {
type Output (line 58) | type Output = TokenResult;
method poll (line 60) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
FILE: aws/rust-runtime/aws-credential-types/src/provider/token.rs
type Result (line 25) | pub type Result = std::result::Result<Token, TokenError>;
type ProvideToken (line 28) | pub trait ProvideToken: Send + Sync + std::fmt::Debug {
method provide_token (line 30) | fn provide_token<'a>(&'a self) -> future::ProvideToken<'a>
method provide_token (line 36) | fn provide_token<'a>(&'a self) -> future::ProvideToken<'a>
method provide_token (line 73) | fn provide_token<'a>(&'a self) -> future::ProvideToken<'a>
type SharedTokenProvider (line 48) | pub struct SharedTokenProvider(Arc<dyn ProvideToken>, IdentityCacheParti...
method new (line 55) | pub fn new(provider: impl ProvideToken + 'static) -> Self {
method as_ref (line 61) | fn as_ref(&self) -> &(dyn ProvideToken + 'static) {
method from (line 67) | fn from(provider: Arc<dyn ProvideToken>) -> Self {
method resolve_identity (line 82) | fn resolve_identity<'a>(
method cache_partition (line 90) | fn cache_partition(&self) -> Option<IdentityCachePartition> {
function reuses_cache_partition (line 104) | fn reuses_cache_partition() {
FILE: aws/rust-runtime/aws-credential-types/src/token_fn.rs
type ProvideTokenFn (line 17) | pub struct ProvideTokenFn<'c, T> {
method fmt (line 23) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
method provide_token (line 33) | fn provide_token<'a>(&'a self) -> future::ProvideToken<'a>
function provide_token_fn (line 61) | pub fn provide_token_fn<'c, T, F>(f: T) -> ProvideTokenFn<'c, T>
function assert_send_sync (line 77) | fn assert_send_sync<T: Send + Sync>() {}
function creds_are_send_sync (line 80) | fn creds_are_send_sync() {
function provide_token_fn_closure_can_borrow (line 86) | async fn provide_token_fn_closure_can_borrow() {
FILE: aws/rust-runtime/aws-inlineable/src/account_id_endpoint.rs
type AccountIdEndpointFeatureTrackerInterceptor (line 18) | pub(crate) struct AccountIdEndpointFeatureTrackerInterceptor;
method name (line 22) | fn name(&self) -> &'static str {
method read_before_execution (line 26) | fn read_before_execution(
FILE: aws/rust-runtime/aws-inlineable/src/apigateway_interceptors.rs
type AcceptHeaderInterceptor (line 18) | pub(crate) struct AcceptHeaderInterceptor {
method name (line 24) | fn name(&self) -> &'static str {
method modify_before_signing (line 28) | fn modify_before_signing(
FILE: aws/rust-runtime/aws-inlineable/src/aws_chunked.rs
constant X_AMZ_DECODED_CONTENT_LENGTH (line 36) | const X_AMZ_DECODED_CONTENT_LENGTH: &str = "x-amz-decoded-content-length";
constant TRAILER_SEPARATOR (line 37) | const TRAILER_SEPARATOR: &[u8] = b":";
constant SIGNATURE_VALUE_LENGTH (line 38) | const SIGNATURE_VALUE_LENGTH: usize = 64;
constant MIN_CHUNK_SIZE_BYTE (line 39) | const MIN_CHUNK_SIZE_BYTE: usize = 8192;
type ChunkSize (line 43) | pub(crate) enum ChunkSize {
type Storer (line 51) | type Storer = StoreReplace<Self>;
type ChunkSizeRuntimePlugin (line 56) | pub(crate) struct ChunkSizeRuntimePlugin {
method new (line 61) | pub(crate) fn new(chunk_size: ChunkSize) -> Self {
method config (line 67) | fn config(&self) -> Option<FrozenLayer> {
type Error (line 76) | enum Error {
method fmt (line 82) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type AwsChunkedContentEncodingInterceptor (line 99) | pub(crate) struct AwsChunkedContentEncodingInterceptor;
method name (line 103) | fn name(&self) -> &'static str {
method modify_before_signing (line 107) | fn modify_before_signing(
method modify_before_transmit (line 175) | fn modify_before_transmit(
function must_not_use_chunked_encoding (line 222) | fn must_not_use_chunked_encoding(request: &Request, cfg: &ConfigBag) -> ...
function create_chunked_body_options (line 230) | fn create_chunked_body_options(
function test_aws_chunked_body_is_retryable (line 296) | async fn test_aws_chunked_body_is_retryable() {
function test_deferred_signer_and_payload_override_when_not_over_tls (line 352) | async fn test_deferred_signer_and_payload_override_when_not_over_tls() {
function test_short_circuit_modify_before_signing (line 383) | async fn test_short_circuit_modify_before_signing() {
function test_short_circuit_modify_before_transmit (line 416) | async fn test_short_circuit_modify_before_transmit() {
function test_must_not_use_chunked_encoding_with_in_memory_body (line 454) | fn test_must_not_use_chunked_encoding_with_in_memory_body() {
function streaming_body (line 461) | async fn streaming_body(path: impl AsRef<std::path::Path>) -> SdkBody {
function test_must_not_use_chunked_encoding_with_disabled_option (line 472) | async fn test_must_not_use_chunked_encoding_with_disabled_option() {
function test_chunked_encoding_is_used (line 483) | async fn test_chunked_encoding_is_used() {
FILE: aws/rust-runtime/aws-inlineable/src/dsql_auth_token.rs
constant ACTION (line 19) | const ACTION: &str = "DbConnect";
constant ACTION_ADMIN (line 20) | const ACTION_ADMIN: &str = "DbConnectAdmin";
constant SERVICE (line 21) | const SERVICE: &str = "dsql";
type AuthTokenGenerator (line 44) | pub struct AuthTokenGenerator {
method new (line 73) | pub fn new(config: Config) -> Self {
method db_connect_auth_token (line 78) | pub async fn db_connect_auth_token(
method db_connect_admin_auth_token (line 86) | pub async fn db_connect_admin_auth_token(
method inner (line 93) | async fn inner(
type AuthToken (line 53) | pub struct AuthToken {
method as_str (line 60) | pub fn as_str(&self) -> &str {
method fmt (line 66) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type Config (line 146) | pub struct Config {
method builder (line 164) | pub fn builder() -> ConfigBuilder {
method credentials (line 169) | pub fn credentials(&self) -> Option<SharedCredentialsProvider> {
method hostname (line 174) | pub fn hostname(&self) -> &str {
method region (line 179) | pub fn region(&self) -> Option<&Region> {
method expires_in (line 184) | pub fn expires_in(&self) -> Option<u64> {
type ConfigBuilder (line 191) | pub struct ConfigBuilder {
method credentials (line 211) | pub fn credentials(mut self, credentials: impl ProvideCredentials + 's...
method hostname (line 217) | pub fn hostname(mut self, hostname: impl Into<String>) -> Self {
method region (line 223) | pub fn region(mut self, region: Region) -> Self {
method expires_in (line 231) | pub fn expires_in(mut self, expires_in: u64) -> Self {
method build (line 238) | pub fn build(self) -> Result<Config, BoxError> {
function signing_works (line 259) | async fn signing_works() {
function signing_works_admin (line 281) | async fn signing_works_admin() {
FILE: aws/rust-runtime/aws-inlineable/src/endpoint_auth.rs
function resolve_endpoint_based_auth_scheme_options (line 18) | pub(crate) async fn resolve_endpoint_based_auth_scheme_options<'a>(
function merge_auth_scheme_options (line 66) | fn merge_auth_scheme_options(
function into_auth_scheme_ids (line 102) | fn into_auth_scheme_ids<const N: usize>(strs: [&'static str; N]) -> Vec<...
function into_auth_scheme_options (line 106) | fn into_auth_scheme_options<const N: usize>(strs: [&'static str; N]) -> ...
function merge_auth_scheme_options_basic (line 113) | fn merge_auth_scheme_options_basic() {
function merge_auth_scheme_options_preserving_modeled_auth_properties (line 130) | fn merge_auth_scheme_options_preserving_modeled_auth_properties() {
function merge_auth_scheme_options_with_empty_endpoint_auth_scheme_options (line 163) | fn merge_auth_scheme_options_with_empty_endpoint_auth_scheme_options() {
function merge_auth_scheme_options_should_also_include_those_only_in_endpoint_auth_scheme_options (line 179) | fn merge_auth_scheme_options_should_also_include_those_only_in_endpoint_...
FILE: aws/rust-runtime/aws-inlineable/src/endpoint_discovery.rs
type ReloadEndpoint (line 25) | pub struct ReloadEndpoint {
method reload_once (line 42) | pub async fn reload_once(&self) {
method reload_task (line 55) | pub async fn reload_task(mut self) {
method reload_increment (line 66) | async fn reload_increment(&self, now: SystemTime) {
method fmt (line 35) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type EndpointCache (line 82) | pub(crate) struct EndpointCache {
method resolve_endpoint (line 144) | fn resolve_endpoint(&self) -> EndpointFuture<'_> {
method resolve_endpoint (line 90) | fn resolve_endpoint<'a>(&'a self, _params: &'a EndpointResolverParams) -...
type ExpiringEndpoint (line 96) | struct ExpiringEndpoint {
method is_expired (line 102) | fn is_expired(&self, now: SystemTime) -> bool {
function create_cache (line 111) | pub(crate) async fn create_cache<F>(
function check_send_v (line 172) | fn check_send_v<T: Send>(t: T) -> T {
function check_traits (line 178) | async fn check_traits() {
function erroring_endpoint_always_reloaded (line 196) | async fn erroring_endpoint_always_reloaded() {
function test_advance_of_task (line 238) | async fn test_advance_of_task() {
FILE: aws/rust-runtime/aws-inlineable/src/glacier_interceptors.rs
constant DEFAULT_ACCOUNT_ID (line 29) | const DEFAULT_ACCOUNT_ID: &str = "-";
constant TREE_HASH_HEADER (line 31) | const TREE_HASH_HEADER: &str = "x-amz-sha256-tree-hash";
constant X_AMZ_CONTENT_SHA256 (line 32) | const X_AMZ_CONTENT_SHA256: &str = "x-amz-content-sha256";
constant API_VERSION_HEADER (line 33) | const API_VERSION_HEADER: &str = "x-amz-glacier-version";
type GlacierAccountId (line 40) | pub(crate) trait GlacierAccountId: fmt::Debug {
method account_id_mut (line 42) | fn account_id_mut(&mut self) -> &mut Option<String>;
method autofill_account_id (line 45) | fn autofill_account_id(&mut self) {
type GlacierAccountIdAutofillInterceptor (line 55) | pub(crate) struct GlacierAccountIdAutofillInterceptor<I> {
function new (line 61) | pub(crate) fn new() -> Self {
method name (line 72) | fn name(&self) -> &'static str {
method modify_before_serialization (line 76) | fn modify_before_serialization(
type GlacierApiVersionInterceptor (line 93) | pub(crate) struct GlacierApiVersionInterceptor {
method new (line 99) | pub(crate) fn new(api_version: &'static str) -> Self {
method name (line 106) | fn name(&self) -> &'static str {
method modify_before_signing (line 110) | fn modify_before_signing(
type GlacierTreeHashHeaderInterceptor (line 126) | pub(crate) struct GlacierTreeHashHeaderInterceptor {
method name (line 132) | fn name(&self) -> &'static str {
method modify_before_serialization (line 136) | fn modify_before_serialization(
method modify_before_retry_loop (line 149) | fn modify_before_retry_loop(
function add_checksum_treehash (line 189) | fn add_checksum_treehash(
constant MEGABYTE (line 207) | const MEGABYTE: usize = 1024 * 1024;
function compute_hashes (line 208) | fn compute_hashes(
function compute_hash_tree (line 232) | fn compute_hash_tree(mut hashes: Vec<Digest>) -> Digest {
function autofill_account_id (line 261) | fn autofill_account_id() {
function api_version_interceptor (line 301) | fn api_version_interceptor() {
function compute_digests (line 329) | fn compute_digests() {
function empty_body_computes_digest (line 353) | fn empty_body_computes_digest() {
function compute_tree_digest (line 360) | fn compute_tree_digest() {
function hash_value_test (line 388) | fn hash_value_test() {
FILE: aws/rust-runtime/aws-inlineable/src/http_request_checksum.rs
type Error (line 36) | pub(crate) enum Error {
method fmt (line 41) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type RequestChecksumInterceptorState (line 55) | struct RequestChecksumInterceptorState {
method checksum_algorithm (line 65) | fn checksum_algorithm(&self) -> Option<ChecksumAlgorithm> {
method calculate_checksum (line 71) | fn calculate_checksum(&self) -> bool {
type Storer (line 77) | type Storer = StoreReplace<Self>;
type CustomDefaultFn (line 80) | type CustomDefaultFn = Box<
type DefaultRequestChecksumOverride (line 87) | pub(crate) struct DefaultRequestChecksumOverride {
method fmt (line 91) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method new (line 99) | pub(crate) fn new<F>(custom_default: F) -> Self
method custom_default (line 110) | pub(crate) fn custom_default(
type Storer (line 96) | type Storer = StoreReplace<Self>;
type RequestChecksumInterceptor (line 119) | pub(crate) struct RequestChecksumInterceptor<AP, CM> {
function fmt (line 125) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function new (line 131) | pub(crate) fn new(algorithm_provider: AP, checksum_mutator: CM) -> Self {
method name (line 145) | fn name(&self) -> &'static str {
method modify_before_serialization (line 149) | fn modify_before_serialization(
method modify_before_retry_loop (line 170) | fn modify_before_retry_loop(
method modify_before_signing (line 227) | fn modify_before_signing(
method modify_before_transmit (line 278) | fn modify_before_transmit(
function incorporate_custom_default (line 323) | fn incorporate_custom_default(
function get_or_cache_headers (line 333) | fn get_or_cache_headers(
function calculate_checksum (line 349) | fn calculate_checksum(cfg: &mut ConfigBag, state: &RequestChecksumInterc...
function track_metric_for_selected_checksum_algorithm (line 381) | fn track_metric_for_selected_checksum_algorithm(
function create_test_interceptor (line 431) | fn create_test_interceptor() -> RequestChecksumInterceptor<
function test_checksum_body_is_retryable (line 445) | async fn test_checksum_body_is_retryable() {
FILE: aws/rust-runtime/aws-inlineable/src/http_response_checksum.rs
type ResponseChecksumInterceptorState (line 25) | struct ResponseChecksumInterceptorState {
type Storer (line 29) | type Storer = StoreReplace<Self>;
type ResponseChecksumInterceptor (line 32) | pub(crate) struct ResponseChecksumInterceptor<VE, CM> {
function fmt (line 39) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function new (line 47) | pub(crate) fn new(
method name (line 66) | fn name(&self) -> &'static str {
method modify_before_serialization (line 70) | fn modify_before_serialization(
method modify_before_deserialization (line 105) | fn modify_before_deserialization(
function wrap_body_with_checksum_validator (line 162) | pub(crate) fn wrap_body_with_checksum_validator(
function check_headers_for_precalculated_checksum (line 181) | pub(crate) fn check_headers_for_precalculated_checksum(
function is_part_level_checksum (line 235) | fn is_part_level_checksum(checksum: &str) -> bool {
function test_build_checksum_validated_body_works (line 272) | async fn test_build_checksum_validated_body_works() {
function test_is_multipart_object_checksum (line 297) | fn test_is_multipart_object_checksum() {
function part_level_checksum_detection_works (line 320) | fn part_level_checksum_detection_works() {
FILE: aws/rust-runtime/aws-inlineable/src/lib.rs
type Client (line 82) | pub struct Client;
FILE: aws/rust-runtime/aws-inlineable/src/observability_feature.rs
type ObservabilityFeatureTrackerInterceptor (line 17) | pub(crate) struct ObservabilityFeatureTrackerInterceptor;
method name (line 21) | fn name(&self) -> &'static str {
method read_before_execution (line 25) | fn read_before_execution(
FILE: aws/rust-runtime/aws-inlineable/src/presigning.rs
constant ONE_WEEK (line 22) | const ONE_WEEK: Duration = Duration::from_secs(604800);
type PresigningConfig (line 27) | pub struct PresigningConfig {
method expires_in (line 41) | pub fn expires_in(expires_in: Duration) -> Result<PresigningConfig, Pr...
method builder (line 46) | pub fn builder() -> PresigningConfigBuilder {
method expires (line 51) | pub fn expires(&self) -> Duration {
method start_time (line 57) | pub fn start_time(&self) -> SystemTime {
type ErrorKind (line 63) | enum ErrorKind {
type PresigningConfigError (line 73) | pub struct PresigningConfigError {
method fmt (line 80) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method from (line 91) | fn from(kind: ErrorKind) -> Self {
type PresigningConfigBuilder (line 99) | pub struct PresigningConfigBuilder {
method start_time (line 112) | pub fn start_time(mut self, start_time: SystemTime) -> Self {
method set_start_time (line 124) | pub fn set_start_time(&mut self, start_time: Option<SystemTime>) {
method expires_in (line 136) | pub fn expires_in(mut self, expires_in: Duration) -> Self {
method set_expires_in (line 149) | pub fn set_expires_in(&mut self, expires_in: Option<Duration>) {
method build (line 155) | pub fn build(self) -> Result<PresigningConfig, PresigningConfigError> {
type PresignedRequest (line 178) | pub struct PresignedRequest {
method new (line 199) | pub(crate) fn new(inner: HttpRequest) -> Result<Self, BoxError> {
method method (line 212) | pub fn method(&self) -> &str {
method uri (line 217) | pub fn uri(&self) -> &str {
method headers (line 224) | pub fn headers(&self) -> impl Iterator<Item = (&str, &str)> {
method make_http_02x_request (line 231) | pub fn make_http_02x_request<B>(&self, body: B) -> http::Request<B> {
method into_http_02x_request (line 237) | pub fn into_http_02x_request<B>(self, body: B) -> http::Request<B> {
method make_http_1x_request (line 245) | pub fn make_http_1x_request<B>(&self, body: B) -> http_1x::Request<B> {
method into_http_1x_request (line 250) | pub fn into_http_1x_request<B>(self, body: B) -> http_1x::Request<B> {
method fmt (line 259) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method clone (line 183) | fn clone(&self) -> Self {
type PresigningMarker (line 271) | pub(crate) struct PresigningMarker;
type Storer (line 274) | type Storer = StoreReplace<Self>;
FILE: aws/rust-runtime/aws-inlineable/src/presigning_interceptors.rs
type SigV4PresigningInterceptor (line 35) | pub(crate) struct SigV4PresigningInterceptor {
method new (line 41) | pub(crate) fn new(config: PresigningConfig, payload_override: Signable...
method name (line 51) | fn name(&self) -> &'static str {
method modify_before_serialization (line 55) | fn modify_before_serialization(
method modify_before_signing (line 72) | fn modify_before_signing(
type SigV4PresigningRuntimePlugin (line 96) | pub(crate) struct SigV4PresigningRuntimePlugin {
method new (line 101) | pub(crate) fn new(config: PresigningConfig, payload_override: Signable...
method config (line 115) | fn config(&self) -> Option<FrozenLayer> {
method runtime_components (line 123) | fn runtime_components(
FILE: aws/rust-runtime/aws-inlineable/src/rds_auth_token.rs
constant ACTION (line 21) | const ACTION: &str = "connect";
constant SERVICE (line 22) | const SERVICE: &str = "rds-db";
type AuthTokenGenerator (line 47) | pub struct AuthTokenGenerator {
method new (line 75) | pub fn new(config: Config) -> Self {
method auth_token (line 80) | pub async fn auth_token(
type AuthToken (line 55) | pub struct AuthToken {
method as_str (line 62) | pub fn as_str(&self) -> &str {
method fmt (line 68) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type Config (line 140) | pub struct Config {
method builder (line 166) | pub fn builder() -> ConfigBuilder {
method credentials (line 171) | pub fn credentials(&self) -> Option<SharedCredentialsProvider> {
method hostname (line 176) | pub fn hostname(&self) -> &str {
method port (line 181) | pub fn port(&self) -> u64 {
method region (line 186) | pub fn region(&self) -> Option<&Region> {
method username (line 191) | pub fn username(&self) -> &str {
method expires_in (line 198) | pub fn expires_in(&self) -> Option<u64> {
type ConfigBuilder (line 205) | pub struct ConfigBuilder {
method credentials (line 231) | pub fn credentials(mut self, credentials: impl ProvideCredentials + 's...
method hostname (line 237) | pub fn hostname(mut self, hostname: impl Into<String>) -> Self {
method port (line 243) | pub fn port(mut self, port: u64) -> Self {
method region (line 249) | pub fn region(mut self, region: Region) -> Self {
method username (line 255) | pub fn username(mut self, username: impl Into<String>) -> Self {
method expires_in (line 263) | pub fn expires_in(mut self, expires_in: u64) -> Self {
method build (line 270) | pub fn build(self) -> Result<Config, BoxError> {
function signing_works (line 293) | async fn signing_works() {
FILE: aws/rust-runtime/aws-inlineable/src/route53_resource_id_preprocessor.rs
function trim_resource_id (line 19) | fn trim_resource_id(resource_id: &mut Option<String>) {
type Route53ResourceIdInterceptor (line 41) | pub(crate) struct Route53ResourceIdInterceptor<G, T>
function fmt (line 53) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function new (line 62) | pub(crate) fn new(get_mut_resource_id: G) -> Self {
method name (line 76) | fn name(&self) -> &'static str {
method modify_before_serialization (line 80) | fn modify_before_serialization(
function does_not_change_regular_zones (line 98) | fn does_not_change_regular_zones() {
function sanitizes_prefixed_zone (line 114) | fn sanitizes_prefixed_zone() {
function allow_no_leading_slash (line 130) | fn allow_no_leading_slash() {
FILE: aws/rust-runtime/aws-inlineable/src/s3_expires_interceptor.rs
type S3ExpiresInterceptor (line 19) | pub(crate) struct S3ExpiresInterceptor;
constant EXPIRES (line 20) | const EXPIRES: &str = "Expires";
constant EXPIRES_STRING (line 21) | const EXPIRES_STRING: &str = "ExpiresString";
method name (line 25) | fn name(&self) -> &'static str {
method modify_before_deserialization (line 29) | fn modify_before_deserialization(
FILE: aws/rust-runtime/aws-inlineable/src/s3_express.rs
constant SCHEME_ID (line 14) | pub(crate) const SCHEME_ID: AuthSchemeId = AuthSchemeId::new("sigv4-s3ex...
type S3ExpressAuthScheme (line 18) | pub(crate) struct S3ExpressAuthScheme {
method new (line 24) | pub(crate) fn new() -> Self {
method scheme_id (line 30) | fn scheme_id(&self) -> AuthSchemeId {
method identity_resolver (line 34) | fn identity_resolver(
method signer (line 41) | fn signer(&self) -> &dyn Sign {
constant DEFAULT_MAX_CACHE_CAPACITY (line 67) | pub(crate) const DEFAULT_MAX_CACHE_CAPACITY: usize = 100;
constant DEFAULT_BUFFER_TIME (line 68) | pub(crate) const DEFAULT_BUFFER_TIME: Duration = Duration::from_secs(10);
type CacheKey (line 71) | pub(crate) struct CacheKey(String);
type S3ExpressIdentityCache (line 78) | pub(crate) struct S3ExpressIdentityCache {
method fmt (line 86) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method new (line 100) | pub(crate) fn new(
method key (line 119) | pub(crate) fn key(&self, bucket_name: &str, creds: &Credentials) -> Ca...
method get_or_load (line 131) | pub(crate) async fn get_or_load<F, Fut>(
function epoch_secs (line 197) | fn epoch_secs(secs: u64) -> SystemTime {
function identity_expiring_in (line 201) | fn identity_expiring_in(expired_secs: u64) -> Identity {
function test_identity_resolver (line 206) | fn test_identity_resolver(
function load (line 232) | async fn load(
function expect_identity (line 243) | async fn expect_identity<F, Fut>(
function reload_expired_test_identity (line 257) | async fn reload_expired_test_identity() {
function load_contention (line 306) | fn load_contention() {
function identity_fetch_triggered_by_lru_eviction (line 374) | async fn identity_fetch_triggered_by_lru_eviction() {
type DefaultS3ExpressIdentityProvider (line 468) | pub(crate) struct DefaultS3ExpressIdentityProvider {
method builder (line 492) | pub(crate) fn builder() -> Builder {
method identity (line 496) | async fn identity<'a>(
method bucket_name (line 530) | fn bucket_name<'a>(&'a self, config_bag: &'a ConfigBag) -> Result<&'a ...
method express_session_credentials (line 542) | async fn express_session_credentials<'a>(
type Error (line 474) | type Error = BoxError;
method try_from (line 476) | fn try_from(session_creds: SessionCredentials) -> Result<Self, Self::Err...
type Builder (line 567) | pub(crate) struct Builder {
method behavior_version (line 574) | pub(crate) fn behavior_version(
method set_behavior_version (line 581) | pub(crate) fn set_behavior_version(
method time_source (line 588) | pub(crate) fn time_source(mut self, time_source: impl TimeSource + 'st...
method set_time_source (line 592) | pub(crate) fn set_time_source(&mut self, time_source: SharedTimeSource...
method buffer_time (line 597) | pub(crate) fn buffer_time(mut self, buffer_time: Duration) -> Self {
method set_buffer_time (line 602) | pub(crate) fn set_buffer_time(&mut self, buffer_time: Option<Duration>...
method build (line 606) | pub(crate) fn build(self) -> DefaultS3ExpressIdentityProvider {
method resolve_identity (line 621) | fn resolve_identity<'a>(
method cache_location (line 629) | fn cache_location(&self) -> IdentityCacheLocation {
function create_test_runtime_components (line 641) | fn create_test_runtime_components(
function create_test_config_bag (line 689) | fn create_test_config_bag(bucket_name: &str) -> aws_smithy_types::config...
function test_session_credentials_conversion (line 715) | fn test_session_credentials_conversion() {
function test_identity_provider_embeds_s3express_feature (line 733) | async fn test_identity_provider_embeds_s3express_feature() {
constant S3_DISABLE_EXPRESS_SESSION_AUTH (line 793) | pub(super) const S3_DISABLE_EXPRESS_SESSION_AUTH: &str =
type S3ExpressRuntimePlugin (line 798) | pub(crate) struct S3ExpressRuntimePlugin {
method new (line 807) | pub(crate) fn new(service_config: crate::config::Config) -> Self {
method new_with (line 811) | fn new_with(service_config: crate::config::Config, env: Env) -> Self {
function config (line 825) | fn config(
function runtime_components_builder (line 880) | fn runtime_components_builder(
method config (line 913) | fn config(&self) -> Option<FrozenLayer> {
method runtime_components (line 917) | fn runtime_components(
function disable_option_set_from_service_client_should_take_the_highest_precedence (line 932) | fn disable_option_set_from_service_client_should_take_the_highest_preced...
function disable_option_set_from_env_should_take_the_second_highest_precedence (line 951) | fn disable_option_set_from_env_should_take_the_second_highest_precedence...
function disable_option_set_from_profile_file_should_take_the_lowest_precedence (line 969) | fn disable_option_set_from_profile_file_should_take_the_lowest_precedenc...
function disable_option_should_be_unspecified_if_unset (line 974) | fn disable_option_should_be_unspecified_if_unset() {
function s3_express_runtime_plugin_should_set_default_identity_resolver (line 985) | fn s3_express_runtime_plugin_should_set_default_identity_resolver() {
function s3_express_plugin_should_not_set_default_identity_resolver_without_sigv4_counterpart (line 1001) | fn s3_express_plugin_should_not_set_default_identity_resolver_without_si...
function s3_express_plugin_should_not_set_default_identity_resolver_if_user_provided (line 1016) | async fn s3_express_plugin_should_not_set_default_identity_resolver_if_u...
function provide_default_checksum_algorithm (line 1064) | pub(crate) fn provide_default_checksum_algorithm(
function for_s3_express (line 1090) | pub(crate) fn for_s3_express(cfg: &ConfigBag) -> bool {
FILE: aws/rust-runtime/aws-inlineable/src/s3_request_id.rs
constant EXTENDED_REQUEST_ID (line 10) | const EXTENDED_REQUEST_ID: &str = "s3_extended_request_id";
type RequestIdExt (line 15) | pub trait RequestIdExt {
method extended_request_id (line 17) | fn extended_request_id(&self) -> Option<&str>;
method extended_request_id (line 21) | fn extended_request_id(&self) -> Option<&str> {
method extended_request_id (line 31) | fn extended_request_id(&self) -> Option<&str> {
method extended_request_id (line 37) | fn extended_request_id(&self) -> Option<&str> {
method extended_request_id (line 43) | fn extended_request_id(&self) -> Option<&str> {
method extended_request_id (line 53) | fn extended_request_id(&self) -> Option<&str> {
function apply_extended_request_id (line 62) | pub(crate) fn apply_extended_request_id(
function handle_missing_header (line 80) | fn handle_missing_header() {
function test_extended_request_id_sdk_error (line 89) | fn test_extended_request_id_sdk_error() {
function test_extract_extended_request_id (line 124) | fn test_extract_extended_request_id() {
function test_apply_extended_request_id (line 133) | fn test_apply_extended_request_id() {
function test_error_metadata_extended_request_id_impl (line 150) | fn test_error_metadata_extended_request_id_impl() {
FILE: aws/rust-runtime/aws-inlineable/src/serialization_settings.rs
type HeaderSerializationSettings (line 14) | pub(crate) struct HeaderSerializationSettings {
method new (line 21) | pub(crate) fn new() -> Self {
method omit_default_content_length (line 26) | pub(crate) fn omit_default_content_length(self) -> Self {
method omit_default_content_type (line 34) | pub(crate) fn omit_default_content_type(self) -> Self {
method include_header (line 42) | fn include_header(&self, header: &HeaderName) -> bool {
method set_default_header (line 48) | pub(crate) fn set_default_header(
type Storer (line 62) | type Storer = StoreReplace<Self>;
function test_include_header (line 70) | fn test_include_header() {
FILE: aws/rust-runtime/aws-runtime/src/auth.rs
type HttpSignatureType (line 33) | pub enum HttpSignatureType {
type SigningOptions (line 46) | pub struct SigningOptions {
method default (line 66) | fn default() -> Self {
type SessionTokenNameOverrideFn (line 80) | pub(crate) type SessionTokenNameOverrideFn = Box<
type SigV4SessionTokenNameOverride (line 88) | pub struct SigV4SessionTokenNameOverride {
method new (line 94) | pub fn new<F>(name_override: F) -> Self
method name_override (line 107) | pub fn name_override(
method fmt (line 117) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type Storer (line 123) | type Storer = StoreReplace<Self>;
type SigV4OperationSigningConfig (line 131) | pub struct SigV4OperationSigningConfig {
type Storer (line 149) | type Storer = StoreReplace<Self>;
function settings (line 152) | fn settings(operation_config: &SigV4OperationSigningConfig) -> SigningSe...
type SigV4SigningError (line 183) | enum SigV4SigningError {
method fmt (line 194) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function extract_endpoint_auth_scheme_signing_name (line 218) | fn extract_endpoint_auth_scheme_signing_name(
function extract_endpoint_auth_scheme_signing_region (line 230) | fn extract_endpoint_auth_scheme_signing_region(
function extract_endpoint_auth_scheme_signing_options (line 246) | fn extract_endpoint_auth_scheme_signing_options<'a>(
function extract_field_from_endpoint_config (line 283) | fn extract_field_from_endpoint_config<'a>(
function apply_signing_instructions (line 293) | fn apply_signing_instructions(
type PayloadSigningOverride (line 318) | pub enum PayloadSigningOverride {
method unsigned_payload (line 340) | pub fn unsigned_payload() -> Self {
method to_signable_body (line 346) | pub fn to_signable_body(self) -> SignableBody<'static> {
type Storer (line 357) | type Storer = StoreReplace<Self>;
type PayloadSigningOverrideRuntimePlugin (line 362) | pub struct PayloadSigningOverrideRuntimePlugin {
method unsigned (line 369) | pub fn unsigned() -> Self {
method config (line 380) | fn config(&self) -> Option<FrozenLayer> {
FILE: aws/rust-runtime/aws-runtime/src/auth/sigv4.rs
constant EXPIRATION_WARNING (line 33) | const EXPIRATION_WARNING: &str = "Presigned request will expire before t...
constant SCHEME_ID (line 37) | pub const SCHEME_ID: AuthSchemeId = AuthSchemeId::new("sigv4");
type SigV4AuthScheme (line 41) | pub struct SigV4AuthScheme {
method new (line 47) | pub fn new() -> Self {
method scheme_id (line 53) | fn scheme_id(&self) -> AuthSchemeId {
method identity_resolver (line 57) | fn identity_resolver(
method signer (line 64) | fn signer(&self) -> &dyn Sign {
type SigV4Signer (line 71) | pub struct SigV4Signer;
method new (line 75) | pub fn new() -> Self {
method settings (line 79) | fn settings(operation_config: &SigV4OperationSigningConfig) -> Signing...
method signing_params (line 83) | fn signing_params<'a>(
method extract_operation_config (line 124) | fn extract_operation_config<'a>(
method sign_http_request (line 160) | fn sign_http_request(
type SigV4MessageSigner (line 295) | pub(crate) struct SigV4MessageSigner<S> {
function new (line 308) | pub(crate) fn new(
function signing_params (line 326) | fn signing_params(&self) -> v4::SigningParams<'_, S> {
method chunk_signature (line 338) | fn chunk_signature(&mut self, chunk: &Bytes) -> Result<String, SigningEr...
method trailer_signature (line 345) | fn trailer_signature(&mut self, trailing_headers: &Headers) -> Result<St...
method sign (line 362) | fn sign(&mut self, message: Message) -> Result<Message, SignMessageError> {
method sign_empty (line 371) | fn sign_empty(&mut self) -> Option<Result<Message, SignMessageError>> {
function check_send_sync (line 396) | fn check_send_sync<T: Send + Sync>(value: T) -> T {
function sign_message (line 401) | fn sign_message() {
function expiration_warning (line 451) | fn expiration_warning() {
function endpoint_config_overrides_region_and_service (line 492) | fn endpoint_config_overrides_region_and_service() {
function endpoint_config_supports_fallback_when_region_or_service_are_unset (line 526) | fn endpoint_config_supports_fallback_when_region_or_service_are_unset() {
FILE: aws/rust-runtime/aws-runtime/src/auth/sigv4a.rs
constant EXPIRATION_WARNING (line 26) | const EXPIRATION_WARNING: &str = "Presigned request will expire before t...
constant SCHEME_ID (line 30) | pub const SCHEME_ID: AuthSchemeId = AuthSchemeId::new("sigv4a");
type SigV4aAuthScheme (line 34) | pub struct SigV4aAuthScheme {
method new (line 40) | pub fn new() -> Self {
method scheme_id (line 46) | fn scheme_id(&self) -> AuthSchemeId {
method identity_resolver (line 50) | fn identity_resolver(
method signer (line 57) | fn signer(&self) -> &dyn Sign {
type SigV4aSigner (line 65) | pub struct SigV4aSigner;
method new (line 69) | pub fn new() -> Self {
method settings (line 73) | fn settings(operation_config: &SigV4OperationSigningConfig) -> Signing...
method signing_params (line 77) | fn signing_params<'a>(
method extract_operation_config (line 114) | fn extract_operation_config<'a>(
function extract_endpoint_auth_scheme_signing_region_set (line 157) | fn extract_endpoint_auth_scheme_signing_region_set(
method sign_http_request (line 177) | fn sign_http_request(
function expiration_warning (line 248) | fn expiration_warning() {
function endpoint_config_overrides_region_and_service (line 289) | fn endpoint_config_overrides_region_and_service() {
function endpoint_config_supports_fallback_when_region_or_service_are_unset (line 317) | fn endpoint_config_supports_fallback_when_region_or_service_are_unset() {
function user_config_wins_over_endpoint_rules (line 335) | fn user_config_wins_over_endpoint_rules() {
function endpoint_rules_used_when_no_user_config (line 357) | fn endpoint_rules_used_when_no_user_config() {
function falls_back_to_client_region_when_nothing_configured (line 378) | fn falls_back_to_client_region_when_nothing_configured() {
function endpoint_rules_win_over_client_region_when_no_user_config (line 391) | fn endpoint_rules_win_over_client_region_when_no_user_config() {
function user_config_wins_over_both_endpoint_and_region (line 413) | fn user_config_wins_over_both_endpoint_and_region() {
function region_set_is_none_when_nothing_is_configured (line 436) | fn region_set_is_none_when_nothing_is_configured() {
function multi_region_endpoint_rules_preserved (line 448) | fn multi_region_endpoint_rules_preserved() {
FILE: aws/rust-runtime/aws-runtime/src/content_encoding.rs
constant CRLF (line 15) | const CRLF: &str = "\r\n";
constant CRLF_RAW (line 16) | const CRLF_RAW: &[u8] = b"\r\n";
constant CHUNK_SIGNATURE_BEGIN (line 18) | const CHUNK_SIGNATURE_BEGIN: &str = ";chunk-signature=";
constant CHUNK_SIGNATURE_BEGIN_RAW (line 19) | const CHUNK_SIGNATURE_BEGIN_RAW: &[u8] = b";chunk-signature=";
constant CHUNK_TERMINATOR (line 21) | const CHUNK_TERMINATOR: &str = "0\r\n";
constant CHUNK_TERMINATOR_RAW (line 22) | const CHUNK_TERMINATOR_RAW: &[u8] = b"0\r\n";
constant TRAILER_SEPARATOR (line 24) | const TRAILER_SEPARATOR: &[u8] = b":";
constant DEFAULT_CHUNK_SIZE_BYTE (line 26) | const DEFAULT_CHUNK_SIZE_BYTE: usize = 64 * 1024;
constant SIGNATURE_LENGTH (line 28) | const SIGNATURE_LENGTH: usize = 64;
constant X_AMZ_TRAILER_SIGNATURE (line 33) | pub const X_AMZ_TRAILER_SIGNATURE: &str = "x-amz-trailer-signature";
constant AWS_CHUNKED (line 39) | pub const AWS_CHUNKED: &str = "aws-chunked";
FILE: aws/rust-runtime/aws-runtime/src/content_encoding/body.rs
type ChunkBuf (line 20) | pub(super) enum ChunkBuf {
method remaining (line 34) | pub(super) fn remaining(&self) -> usize {
method is_eos (line 42) | pub(super) fn is_eos(&self) -> bool {
method buffered (line 47) | pub(super) fn buffered(&mut self) -> &mut SegmentedBuf<Bytes> {
method ended (line 57) | pub(super) fn ended(self) -> Self {
type AwsChunkedBodyState (line 68) | pub(super) enum AwsChunkedBodyState {
function new (line 110) | pub fn new(body: Inner, options: AwsChunkedBodyOptions) -> Self {
function with_signer (line 124) | pub fn with_signer<S>(mut self, signer: S) -> Self
function buffer_next_chunk (line 137) | pub(super) fn buffer_next_chunk(
type AwsChunkedBodyError (line 180) | pub(super) enum AwsChunkedBodyError {
method fmt (line 195) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
function test_aws_chunked_body_is_unwind_safe_and_ref_unwind_safe (line 217) | fn test_aws_chunked_body_is_unwind_safe_and_ref_unwind_safe() {
FILE: aws/rust-runtime/aws-runtime/src/content_encoding/body/http_body_0_x.rs
type Data (line 17) | type Data = Bytes;
type Error (line 18) | type Error = aws_smithy_types::body::Error;
function poll_data (line 20) | fn poll_data(
function poll_trailers (line 105) | fn poll_trailers(
function is_end_stream (line 113) | fn is_end_stream(&self) -> bool {
function size_hint (line 117) | fn size_hint(&self) -> http_body_04x::SizeHint {
function trailers_as_aws_chunked_bytes (line 128) | fn trailers_as_aws_chunked_bytes(
function total_rendered_length_of_trailers (line 164) | fn total_rendered_length_of_trailers(trailer_map: Option<&http_02x::Head...
method len (line 205) | fn len(&self) -> usize {
type Data (line 211) | type Data = Bytes;
type Error (line 212) | type Error = aws_smithy_types::body::Error;
method poll_data (line 214) | fn poll_data(
method poll_trailers (line 243) | fn poll_trailers(
method is_end_stream (line 250) | fn is_end_stream(&self) -> bool {
method size_hint (line 254) | fn size_hint(&self) -> SizeHint {
function test_aws_chunked_encoding (line 260) | async fn test_aws_chunked_encoding() {
function test_aws_chunked_encoding_sputtering_body (line 301) | async fn test_aws_chunked_encoding_sputtering_body() {
function test_aws_chunked_encoding_incorrect_trailer_length_panic (line 358) | async fn test_aws_chunked_encoding_incorrect_trailer_length_panic() {
function test_aws_chunked_encoding_empty_body (line 382) | async fn test_aws_chunked_encoding_empty_body() {
function test_total_rendered_length_of_trailers (line 411) | async fn test_total_rendered_length_of_trailers() {
function test_total_rendered_length_of_empty_trailers (line 433) | async fn test_total_rendered_length_of_empty_trailers() {
FILE: aws/rust-runtime/aws-runtime/src/content_encoding/body/http_body_1_x.rs
type Data (line 34) | type Data = Bytes;
type Error (line 35) | type Error = aws_smithy_types::body::Error;
function is_end_stream (line 37) | fn is_end_stream(&self) -> bool {
function size_hint (line 41) | fn size_hint(&self) -> http_body_1x::SizeHint {
function poll_frame (line 45) | fn poll_frame(
function signed_encoded_chunk (line 244) | fn signed_encoded_chunk(
function unsigned_encoded_chunk (line 259) | fn unsigned_encoded_chunk(chunk_bytes: Bytes) -> Bytes {
function trailers_as_aws_chunked_bytes (line 274) | fn trailers_as_aws_chunked_bytes(
function total_rendered_length_of_trailers (line 308) | fn total_rendered_length_of_trailers(trailer_map: Option<&http_1x::Heade...
function check_for_stream_length_mismatch (line 326) | fn check_for_stream_length_mismatch(
method len (line 371) | fn len(&self) -> usize {
type Data (line 377) | type Data = Bytes;
type Error (line 378) | type Error = aws_smithy_types::body::Error;
method poll_frame (line 380) | fn poll_frame(
method is_end_stream (line 410) | fn is_end_stream(&self) -> bool {
method size_hint (line 414) | fn size_hint(&self) -> SizeHint {
type Data (line 428) | type Data = Bytes;
type Error (line 429) | type Error = aws_smithy_types::body::Error;
method poll_frame (line 431) | fn poll_frame(
function test_aws_chunked_encoding (line 450) | async fn test_aws_chunked_encoding() {
function test_aws_chunked_encoding_sputtering_body (line 484) | async fn test_aws_chunked_encoding_sputtering_body() {
function test_aws_chunked_encoding_incorrect_trailer_length_panic (line 533) | async fn test_aws_chunked_encoding_incorrect_trailer_length_panic() {
function test_aws_chunked_encoding_empty_body (line 549) | async fn test_aws_chunked_encoding_empty_body() {
function test_total_rendered_length_of_trailers (line 573) | async fn test_total_rendered_length_of_trailers() {
function test_total_rendered_length_of_empty_trailers (line 596) | async fn test_total_rendered_length_of_empty_trailers() {
function test_poll_frame_with_default_chunk_size (line 607) | async fn test_poll_frame_with_default_chunk_size() {
function test_poll_frame_with_custom_chunk_size (line 629) | async fn test_poll_frame_with_custom_chunk_size() {
function test_poll_frame_with_trailers (line 651) | async fn test_poll_frame_with_trailers() {
function test_aws_chunked_body_poll_frame_with_signer (line 682) | async fn test_aws_chunked_body_poll_frame_with_signer() {
function test_aws_chunked_body_poll_frame_with_signer_and_trailers (line 737) | async fn test_aws_chunked_body_poll_frame_with_signer_and_trailers() {
function test_unsigned_encoded_length_with_no_trailer (line 804) | fn test_unsigned_encoded_length_with_no_trailer() {
function test_unsigned_encoded_length_with_trailer (line 846) | fn test_unsigned_encoded_length_with_trailer() {
function test_signed_encoded_length_with_no_trailer (line 867) | fn test_signed_encoded_length_with_no_trailer() {
function test_signed_encoded_length_with_trailer (line 910) | fn test_signed_encoded_length_with_trailer() {
FILE: aws/rust-runtime/aws-runtime/src/content_encoding/options.rs
type AwsChunkedBodyOptions (line 15) | pub struct AwsChunkedBodyOptions {
method new (line 37) | pub fn new(stream_length: u64, trailer_lengths: Vec<u64>) -> Self {
method with_chunk_size (line 51) | pub fn with_chunk_size(mut self, chunk_size: usize) -> Self {
method chunk_size (line 59) | pub fn chunk_size(&self) -> usize {
method total_trailer_length (line 63) | pub(super) fn total_trailer_length(&self) -> u64 {
method with_stream_length (line 70) | pub fn with_stream_length(mut self, stream_length: u64) -> Self {
method with_trailer_len (line 76) | pub fn with_trailer_len(mut self, trailer_len: u64) -> Self {
method is_trailer_empty (line 82) | pub fn is_trailer_empty(&self) -> bool {
method disable_chunked_encoding (line 89) | pub fn disable_chunked_encoding() -> Self {
method disabled (line 97) | pub fn disabled(&self) -> bool {
method signed_chunked_encoding (line 102) | pub fn signed_chunked_encoding(mut self, is_signed: bool) -> Self {
method encoded_length (line 108) | pub fn encoded_length(&self) -> u64 {
method signed_encoded_length (line 116) | fn signed_encoded_length(&self) -> u64 {
method unsigned_encoded_length (line 144) | fn unsigned_encoded_length(&self) -> u64 {
type Storer (line 32) | type Storer = StoreReplace<Self>;
function int_log16 (line 171) | fn int_log16<T>(mut i: T) -> u64
function get_signed_chunk_bytes_length (line 197) | fn get_signed_chunk_bytes_length(payload_length: u64) -> u64 {
function get_unsigned_chunk_bytes_length (line 212) | fn get_unsigned_chunk_bytes_length(payload_length: u64) -> u64 {
function test_int_log16 (line 222) | fn test_int_log16() {
FILE: aws/rust-runtime/aws-runtime/src/content_encoding/sign.rs
type SignChunk (line 15) | pub(crate) trait SignChunk: std::fmt::Debug {
method chunk_signature (line 16) | fn chunk_signature(&mut self, chunk: &Bytes) -> Result<String, Signing...
method trailer_signature (line 18) | fn trailer_signature(&mut self, trailing_headers: &Headers) -> Result<...
method chunk_signature (line 91) | fn chunk_signature(&mut self, chunk: &Bytes) -> Result<String, Signing...
method trailer_signature (line 97) | fn trailer_signature(&mut self, trailing_headers: &Headers) -> Result<...
type DeferredSigner (line 31) | pub struct DeferredSigner {
method new (line 44) | pub fn new() -> (Self, DeferredSignerSender) {
method empty (line 56) | pub fn empty() -> Self {
method acquire (line 63) | fn acquire(&self) -> Box<dyn SignChunk + Send + Sync> {
type Storer (line 39) | type Storer = StoreReplace<Self>;
type DeferredSignerSender (line 73) | pub struct DeferredSignerSender {
method send (line 78) | pub(crate) fn send(
type Storer (line 87) | type Storer = StoreReplace<Self>;
FILE: aws/rust-runtime/aws-runtime/src/env_config.rs
function get_service_env_config (line 24) | pub fn get_service_env_config<'a, T, E>(
type Location (line 41) | enum Location<'a> {
function fmt (line 47) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type Scope (line 56) | enum Scope<'a> {
function fmt (line 62) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type EnvConfigSource (line 79) | pub struct EnvConfigSource<'a> {
function into (line 87) | fn into(self) -> Origin {
function global_from_env (line 100) | pub(crate) fn global_from_env(key: Cow<'a, str>) -> Self {
function global_from_profile (line 108) | pub(crate) fn global_from_profile(key: Cow<'a, str>, profile_name: Cow<'...
function service_from_env (line 116) | pub(crate) fn service_from_env(key: Cow<'a, str>, service_id: Cow<'a, st...
function service_from_profile (line 124) | pub(crate) fn service_from_profile(
function fmt (line 138) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type EnvConfigError (line 145) | pub struct EnvConfigError<E = Box<dyn Error>> {
function err (line 152) | pub fn err(&self) -> &E {
function fmt (line 158) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method source (line 164) | fn source(&self) -> Option<&(dyn Error + 'static)> {
type EnvConfigValue (line 174) | pub struct EnvConfigValue<'a> {
function new (line 182) | pub fn new() -> Self {
function env (line 187) | pub fn env(mut self, key: &'a str) -> Self {
function profile (line 193) | pub fn profile(mut self, key: &'a str) -> Self {
function service_id (line 199) | pub fn service_id(mut self, service_id: &'a str) -> Self {
function validate (line 205) | pub fn validate<T, E: Error + Send + Sync + 'static>(
function validate_and_return_origin (line 225) | pub fn validate_and_return_origin<T, E: Error + Send + Sync + 'static>(
function load (line 247) | pub fn load(
function get_service_config_from_env (line 312) | fn get_service_config_from_env<'a>(
constant SERVICES (line 327) | const SERVICES: &str = "services";
function get_service_config_from_profile (line 329) | fn get_service_config_from_profile<'a>(
function format_service_id_for_env (line 351) | fn format_service_id_for_env(service_id: impl AsRef<str>) -> String {
function format_service_id_for_profile (line 355) | fn format_service_id_for_profile(service_id: impl AsRef<str>) -> String {
function validate_some_key (line 370) | fn validate_some_key(s: &str) -> Result<i32, ParseIntError> {
function new_prop_key (line 374) | fn new_prop_key(
function test_service_config_multiple_services (line 393) | async fn test_service_config_multiple_services() {
function test_service_config_precedence (line 467) | async fn test_service_config_precedence() {
function test_multiple_services (line 520) | async fn test_multiple_services() {
FILE: aws/rust-runtime/aws-runtime/src/env_config/error.rs
type EnvConfigFileLoadError (line 16) | pub enum EnvConfigFileLoadError {
method from (line 49) | fn from(err: EnvConfigParseError) -> Self {
method fmt (line 27) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
method source (line 40) | fn source(&self) -> Option<&(dyn Error + 'static)> {
type CouldNotReadConfigFile (line 56) | pub struct CouldNotReadConfigFile {
FILE: aws/rust-runtime/aws-runtime/src/env_config/file.rs
type EnvConfigFiles (line 38) | pub struct EnvConfigFiles {
method builder (line 44) | pub fn builder() -> Builder {
method default (line 50) | fn default() -> Self {
type EnvConfigFileKind (line 62) | pub enum EnvConfigFileKind {
method default_path (line 70) | pub(crate) fn default_path(&self) -> &'static str {
method override_environment_variable (line 77) | pub(crate) fn override_environment_variable(&self) -> &'static str {
type EnvConfigFile (line 87) | pub(crate) enum EnvConfigFile {
method fmt (line 103) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
type Builder (line 123) | pub struct Builder {
method new (line 131) | pub fn new() -> Self {
method include_default_config_file (line 142) | pub fn include_default_config_file(mut self, include_default_config_fi...
method include_default_credentials_file (line 154) | pub fn include_default_credentials_file(
method with_file (line 167) | pub fn with_file(mut self, kind: EnvConfigFileKind, file: impl Into<Pa...
method with_contents (line 180) | pub fn with_contents(mut self, kind: EnvConfigFileKind, contents: impl...
method build (line 189) | pub fn build(self) -> EnvConfigFiles {
function redact_file_contents_in_profile_file_debug (line 209) | fn redact_file_contents_in_profile_file_debug() {
function build_correctly_orders_default_config_credentials (line 220) | fn build_correctly_orders_default_config_credentials() {
function empty_builder_panics (line 246) | fn empty_builder_panics() {
FILE: aws/rust-runtime/aws-runtime/src/env_config/normalize.rs
constant DEFAULT (line 13) | const DEFAULT: &str = "default";
constant PROFILE_PREFIX (line 14) | const PROFILE_PREFIX: &str = "profile";
constant SSO_SESSION_PREFIX (line 15) | const SSO_SESSION_PREFIX: &str = "sso-session";
type SectionPair (line 19) | struct SectionPair<'a> {
function is_unprefixed_default (line 25) | fn is_unprefixed_default(&self) -> bool {
function is_prefixed_default (line 29) | fn is_prefixed_default(&self) -> bool {
function parse (line 33) | fn parse(input: &str) -> SectionPair<'_> {
function valid_for (line 55) | fn valid_for(self, kind: EnvConfigFileKind) -> Result<Self, String> {
function merge_in (line 102) | pub(super) fn merge_in(
function merge_into_base (line 186) | fn merge_into_base(target: &mut dyn Section, profile: HashMap<Cow<'_, st...
function validate_identifier (line 202) | fn validate_identifier(input: &str) -> Result<&str, ()> {
function parse_sub_properties (line 212) | fn parse_sub_properties(sub_properties_str: &str) -> impl Iterator<Item ...
function section_key_parsing (line 239) | fn section_key_parsing() {
function test_validate_identifier (line 343) | fn test_validate_identifier() {
function ignored_key_generates_warning (line 353) | fn ignored_key_generates_warning() {
function invalid_profile_generates_warning (line 373) | fn invalid_profile_generates_warning() {
FILE: aws/rust-runtime/aws-runtime/src/env_config/parse.rs
type RawProfileSet (line 22) | pub(super) type RawProfileSet<'a> = HashMap<&'a str, HashMap<Cow<'a, str...
constant WHITESPACE (line 28) | pub(crate) const WHITESPACE: &[char] = &[' ', '\t'];
constant COMMENT (line 29) | const COMMENT: &[char] = &['#', ';'];
type Location (line 33) | struct Location {
type EnvConfigParseError (line 40) | pub struct EnvConfigParseError {
method fmt (line 49) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
function validate_subproperty (line 65) | fn validate_subproperty(value: &str, location: Location) -> Result<(), E...
function is_empty_line (line 75) | fn is_empty_line(line: &str) -> bool {
function is_comment_line (line 79) | fn is_comment_line(line: &str) -> bool {
type Parser (line 84) | struct Parser<'a> {
type State (line 97) | enum State<'a> {
function parse_profile_file (line 107) | pub(super) fn parse_profile_file(file: &File) -> Result<RawProfileSet<'_...
function parse_profile (line 122) | fn parse_profile(&mut self, file: &'a str) -> Result<(), EnvConfigParseE...
function read_property_line (line 142) | fn read_property_line(&mut self, line: &'a str) -> Result<(), EnvConfigP...
function make_error (line 163) | fn make_error(&self, message: &str) -> EnvConfigParseError {
function read_property_continuation (line 173) | fn read_property_continuation(&mut self, line: &'a str) -> Result<(), En...
function read_profile_line (line 203) | fn read_profile_line(&mut self, line: &'a str) -> Result<(), EnvConfigPa...
type PropertyError (line 224) | enum PropertyError {
method into_error (line 230) | fn into_error(self, ctx: &str, location: Location) -> EnvConfigParseEr...
function parse_property_line (line 249) | fn parse_property_line(line: &str) -> Result<(Cow<'_, str>, &str), Prope...
function to_ascii_lowercase (line 264) | pub(crate) fn to_ascii_lowercase(s: &str) -> Cow<'_, str> {
function prepare_line (line 282) | fn prepare_line(line: &str, comments_need_whitespace: bool) -> &str {
function property_parsing (line 311) | fn property_parsing() {
function prepare_line_strips_comments (line 333) | fn prepare_line_strips_comments() {
function error_line_numbers (line 351) | fn error_line_numbers() {
FILE: aws/rust-runtime/aws-runtime/src/env_config/property.rs
type Property (line 13) | pub struct Property {
method value (line 20) | pub fn value(&self) -> &str {
method key (line 25) | pub fn key(&self) -> &str {
method new (line 30) | pub fn new(key: String, value: String) -> Self {
type SectionKey (line 35) | type SectionKey = String;
type SectionName (line 36) | type SectionName = String;
type PropertyName (line 37) | type PropertyName = String;
type SubPropertyName (line 38) | type SubPropertyName = String;
type PropertyValue (line 39) | type PropertyValue = String;
type PropertiesKey (line 51) | pub struct PropertiesKey {
method builder (line 60) | pub fn builder() -> PropertiesKeyBuilder {
method fmt (line 66) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type PropertiesKeyBuilder (line 89) | pub struct PropertiesKeyBuilder {
method section_key (line 98) | pub fn section_key(mut self, section_key: impl Into<String>) -> Self {
method section_name (line 104) | pub fn section_name(mut self, section_name: impl Into<String>) -> Self {
method property_name (line 110) | pub fn property_name(mut self, property_name: impl Into<String>) -> Se...
method sub_property_name (line 116) | pub fn sub_property_name(mut self, sub_property_name: impl Into<String...
method build (line 123) | pub fn build(self) -> Result<PropertiesKey, String> {
type Properties (line 141) | pub struct Properties {
method new (line 148) | pub fn new() -> Self {
method new_from_slice (line 153) | pub(crate) fn new_from_slice(slice: &[(PropertiesKey, PropertyValue)])...
method insert (line 162) | pub fn insert(&mut self, properties_key: PropertiesKey, value: Propert...
method get (line 175) | pub fn get(&self, properties_key: &PropertiesKey) -> Option<&PropertyV...
FILE: aws/rust-runtime/aws-runtime/src/env_config/section.rs
type Section (line 16) | pub(crate) trait Section {
method name (line 18) | fn name(&self) -> &str;
method properties (line 22) | fn properties(&self) -> &HashMap<String, Property>;
method get (line 25) | fn get(&self, name: &str) -> Option<&str>;
method is_empty (line 29) | fn is_empty(&self) -> bool;
method insert (line 32) | fn insert(&mut self, name: String, value: Property);
method name (line 42) | fn name(&self) -> &str {
method properties (line 46) | fn properties(&self) -> &HashMap<String, Property> {
method get (line 50) | fn get(&self, name: &str) -> Option<&str> {
method is_empty (line 56) | fn is_empty(&self) -> bool {
method insert (line 60) | fn insert(&mut self, name: String, value: Property) {
method name (line 92) | fn name(&self) -> &str {
method properties (line 96) | fn properties(&self) -> &HashMap<String, Property> {
method get (line 100) | fn get(&self, name: &str) -> Option<&str> {
method is_empty (line 104) | fn is_empty(&self) -> bool {
method insert (line 108) | fn insert(&mut self, name: String, value: Property) {
method name (line 133) | fn name(&self) -> &str {
method properties (line 137) | fn properties(&self) -> &HashMap<String, Property> {
method get (line 141) | fn get(&self, name: &str) -> Option<&str> {
method is_empty (line 145) | fn is_empty(&self) -> bool {
method insert (line 149) | fn insert(&mut self, name: String, value: Property) {
type SectionInner (line 36) | pub(super) struct SectionInner {
type Profile (line 69) | pub struct Profile(SectionInner);
method new (line 73) | pub fn new(name: impl Into<String>, properties: HashMap<String, Proper...
method name (line 81) | pub fn name(&self) -> &str {
method get (line 86) | pub fn get(&self, name: &str) -> Option<&str> {
type SsoSession (line 115) | pub struct SsoSession(SectionInner);
method new (line 119) | pub(super) fn new(name: impl Into<String>, properties: HashMap<String,...
method get (line 127) | pub fn get(&self, name: &str) -> Option<&str> {
type EnvConfigSections (line 156) | pub struct EnvConfigSections {
method new (line 179) | pub fn new(
method get (line 218) | pub fn get(&self, key: &str) -> Option<&str> {
method get_profile (line 225) | pub fn get_profile(&self, profile_name: &str) -> Option<&Profile> {
method selected_profile (line 230) | pub fn selected_profile(&self) -> &str {
method is_empty (line 235) | pub fn is_empty(&self) -> bool {
method profiles (line 240) | pub fn profiles(&self) -> impl Iterator<Item = &str> {
method sso_sessions (line 245) | pub fn sso_sessions(&self) -> impl Iterator<Item = &str> {
method sso_session (line 250) | pub fn sso_session(&self, name: &str) -> Option<&SsoSession> {
method other_sections (line 255) | pub fn other_sections(&self) -> &Properties {
method parse (line 260) | pub fn parse(source: Source) -> Result<Self, EnvConfigParseError> {
method default (line 164) | fn default() -> Self {
function run_tests (line 291) | fn run_tests() -> Result<(), Box<dyn Error>> {
function empty_source_empty_profile (line 302) | fn empty_source_empty_profile() {
function profile_names_are_exposed (line 313) | fn profile_names_are_exposed() {
function run_fuzz_tests (line 329) | fn run_fuzz_tests() -> Result<(), Box<dyn Error>> {
type FlattenedProfileSet (line 362) | struct FlattenedProfileSet {
function flatten (line 366) | fn flatten(config: EnvConfigSections) -> FlattenedProfileSet {
function flatten_sections (line 372) | fn flatten_sections<'a>(
function make_source (line 389) | fn make_source(input: ParserInput) -> Source {
function check (line 408) | fn check(test_case: ParserTest) {
type ParserTests (line 457) | struct ParserTests {
type ParserTest (line 463) | struct ParserTest {
type ParserOutput (line 471) | enum ParserOutput {
type ParserInput (line 482) | struct ParserInput {
FILE: aws/rust-runtime/aws-runtime/src/env_config/source.rs
constant HOME_EXPANSION_FAILURE_WARNING (line 18) | const HOME_EXPANSION_FAILURE_WARNING: &str =
type Source (line 24) | pub struct Source {
type File (line 36) | pub struct File {
function load (line 43) | pub async fn load(
function file_contents_to_string (line 67) | fn file_contents_to_string(path: &Path, contents: Vec<u8>) -> String {
function load_config_file (line 88) | async fn load_config_file(
function expand_home (line 159) | fn expand_home(
function only_expand_home_prefix (line 216) | fn only_expand_home_prefix() {
type SourceTests (line 227) | struct SourceTests {
type TestCase (line 233) | struct TestCase {
function run_tests (line 244) | fn run_tests() -> Result<(), Box<dyn Error>> {
function logs_produced_default (line 258) | fn logs_produced_default() {
function load_config_file_should_not_emit_warning_when_path_not_explicitly_set (line 275) | fn load_config_file_should_not_emit_warning_when_path_not_explicitly_set...
function load_config_file_should_emit_warning_when_path_explicitly_set (line 291) | fn load_config_file_should_emit_warning_when_path_explicitly_set() {
function check (line 305) | async fn check(test_case: TestCase) {
function test_expand_home (line 337) | fn test_expand_home() {
function expand_home_no_home (line 348) | fn expand_home_no_home() {
function test_expand_home_windows (line 367) | fn test_expand_home_windows() {
function programmatically_set_credentials_file_contents (line 378) | async fn programmatically_set_credentials_file_contents() {
function programmatically_set_credentials_file_path (line 395) | async fn programmatically_set_credentials_file_path() {
function programmatically_include_default_files (line 423) | async fn programmatically_include_default_files() {
function default_files_must_not_error (line 459) | async fn default_files_must_not_error() {
function misconfigured_programmatic_custom_profile_path_must_error (line 481) | async fn misconfigured_programmatic_custom_profile_path_must_error() {
FILE: aws/rust-runtime/aws-runtime/src/fs_util.rs
type Os (line 11) | pub enum Os {
method real (line 20) | pub fn real() -> Self {
function home_dir (line 29) | pub fn home_dir(env_var: &os_shim_internal::Env, os: Os) -> Option<Strin...
function homedir_profile_only_windows (line 58) | fn homedir_profile_only_windows() {
FILE: aws/rust-runtime/aws-runtime/src/invocation_id.rs
constant AMZ_SDK_INVOCATION_ID (line 21) | const AMZ_SDK_INVOCATION_ID: HeaderName = HeaderName::from_static("amz-s...
type InvocationIdGenerator (line 24) | pub trait InvocationIdGenerator: Debug + Send + Sync {
method generate (line 27) | fn generate(&self) -> Result<Option<InvocationId>, BoxError>;
method generate (line 42) | fn generate(&self) -> Result<Option<InvocationId>, BoxError> {
method generate (line 72) | fn generate(&self) -> Result<Option<InvocationId>, BoxError> {
method generate (line 185) | fn generate(&self) -> Result<Option<InvocationId>, BoxError> {
method generate (line 208) | fn generate(&self) -> Result<Option<InvocationId>, BoxError> {
type SharedInvocationIdGenerator (line 32) | pub struct SharedInvocationIdGenerator(Arc<dyn InvocationIdGenerator>);
method new (line 36) | pub fn new(gen: impl InvocationIdGenerator + 'static) -> Self {
type Storer (line 48) | type Storer = StoreReplace<Self>;
type DefaultInvocationIdGenerator (line 53) | pub struct DefaultInvocationIdGenerator {
method new (line 59) | pub fn new() -> Self {
method with_seed (line 64) | pub fn with_seed(seed: u64) -> Self {
type InvocationIdInterceptor (line 85) | pub struct InvocationIdInterceptor {
method new (line 91) | pub fn new() -> Self {
method name (line 98) | fn name(&self) -> &'static str {
method modify_before_retry_loop (line 102) | fn modify_before_retry_loop(
method modify_before_transmit (line 119) | fn modify_before_transmit(
type InvocationId (line 135) | pub struct InvocationId(HeaderValue);
method new (line 142) | pub fn new(invocation_id: String) -> Self {
method new_from_str (line 160) | pub fn new_from_str(uuid: &'static str) -> Self {
type Storer (line 151) | type Storer = StoreReplace<Self>;
type PredefinedInvocationIdGenerator (line 167) | pub struct PredefinedInvocationIdGenerator {
method new (line 173) | pub fn new(mut invocation_ids: Vec<InvocationId>) -> Self {
type NoInvocationIdGenerator (line 198) | pub struct NoInvocationIdGenerator;
method new (line 202) | pub fn new() -> Self {
function expect_header (line 226) | fn expect_header<'a>(
function default_id_generator (line 234) | fn default_id_generator() {
function custom_id_generator (line 261) | fn custom_id_generator() {
FILE: aws/rust-runtime/aws-runtime/src/recursion_detection.rs
constant TRACE_ID_HEADER (line 16) | const TRACE_ID_HEADER: &str = "x-amzn-trace-id";
constant LAMBDA_FUNCTION_NAME (line 19) | pub(super) const LAMBDA_FUNCTION_NAME: &str = "AWS_LAMBDA_FUNCTION_NAME";
constant TRACE_ID (line 20) | pub(super) const TRACE_ID: &str = "_X_AMZN_TRACE_ID";
type RecursionDetectionInterceptor (line 31) | pub struct RecursionDetectionInterceptor {
method new (line 37) | pub fn new() -> Self {
method name (line 44) | fn name(&self) -> &'static str {
method modify_before_signing (line 48) | fn modify_before_signing(
function encode_header (line 74) | fn encode_header(value: &[u8]) -> HeaderValue {
function every_char (line 100) | fn every_char() {
function run_tests (line 111) | fn run_tests() {
type TestCase (line 122) | struct TestCase {
method env (line 129) | fn env(&self) -> Env {
method request_headers_before (line 134) | fn request_headers_before(&self) -> impl Iterator<Item = (&str, &str)> {
method request_headers_after (line 139) | fn request_headers_after(&self) -> impl Iterator<Item = (&str, &str)> {
method split_headers (line 144) | fn split_headers(headers: &[String]) -> impl Iterator<Item = (&str, &s...
function check (line 151) | fn check(test_case: TestCase) {
FILE: aws/rust-runtime/aws-runtime/src/request_info.rs
constant AMZ_SDK_REQUEST (line 23) | const AMZ_SDK_REQUEST: HeaderName = HeaderName::from_static("amz-sdk-req...
type RequestInfoInterceptor (line 33) | pub struct RequestInfoInterceptor {}
method new (line 37) | pub fn new() -> Self {
method build_attempts_pair (line 43) | fn build_attempts_pair(
method build_max_attempts_pair (line 55) | fn build_max_attempts_pair(
method build_ttl_pair (line 67) | fn build_ttl_pair(
method name (line 96) | fn name(&self) -> &'static str {
method modify_before_transmit (line 100) | fn modify_before_transmit(
type RequestPairs (line 133) | struct RequestPairs {
method new (line 139) | fn new() -> Self {
method with_pair (line 145) | fn with_pair(
method try_into_header_value (line 155) | fn try_into_header_value(self) -> Result<HeaderValue, BoxError> {
type Error (line 161) | type Error = BoxError;
method try_from (line 163) | fn try_from(value: RequestPairs) -> Result<Self, BoxError> {
function expect_header (line 195) | fn expect_header<'a>(context: &'a InterceptorContext, header_name: &str)...
function test_request_pairs_for_initial_attempt (line 205) | fn test_request_pairs_for_initial_attempt() {
function test_header_value_from_request_pairs_supports_all_valid_characters (line 235) | fn test_header_value_from_request_pairs_supports_all_valid_characters() {
FILE: aws/rust-runtime/aws-runtime/src/retries/classifiers.rs
constant THROTTLING_ERRORS (line 18) | pub const THROTTLING_ERRORS: &[&str] = &[
constant TRANSIENT_ERRORS (line 36) | pub const TRANSIENT_ERRORS: &[&str] = &["RequestTimeout", "RequestTimeou...
type AwsErrorCodeClassifier (line 40) | pub struct AwsErrorCodeClassifier<E> {
method default (line 47) | fn default() -> Self {
type AwsErrorCodeClassifierBuilder (line 58) | pub struct AwsErrorCodeClassifierBuilder<E> {
function transient_errors (line 66) | pub fn transient_errors(
function build (line 75) | pub fn build(self) -> AwsErrorCodeClassifier<E> {
function new (line 86) | pub fn new() -> Self {
function builder (line 91) | pub fn builder() -> AwsErrorCodeClassifierBuilder<E> {
method classify_retry (line 104) | fn classify_retry(&self, ctx: &InterceptorContext) -> RetryAction {
method name (line 146) | fn name(&self) -> &'static str {
method priority (line 150) | fn priority(&self) -> RetryClassifierPriority {
type CodedError (line 172) | struct CodedError {
method new (line 177) | fn new(code: &'static str) -> Self {
method fmt (line 185) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method meta (line 193) | fn meta(&self) -> &ErrorMetadata {
function classify_by_error_code (line 199) | fn classify_by_error_code() {
function classify_generic (line 216) | fn classify_generic() {
function test_retry_after_header (line 229) | fn test_retry_after_header() {
FILE: aws/rust-runtime/aws-runtime/src/sdk_feature.rs
type AwsSdkFeature (line 14) | pub enum AwsSdkFeature {
type Storer (line 32) | type Storer = StoreAppend<Self>;
FILE: aws/rust-runtime/aws-runtime/src/service_clock_skew.rs
type ServiceClockSkew (line 18) | pub(crate) struct ServiceClockSkew {
method new (line 23) | fn new(inner: Duration) -> Self {
type Storer (line 29) | type Storer = StoreReplace<Self>;
method from (line 33) | fn from(skew: ServiceClockSkew) -> Duration {
type ServiceClockSkewInterceptor (line 41) | pub struct ServiceClockSkewInterceptor;
method new (line 45) | pub fn new() -> Self {
function calculate_skew (line 50) | fn calculate_skew(time_sent: DateTime, time_received: DateTime) -> Durat...
function extract_time_sent_from_response (line 55) | fn extract_time_sent_from_response(
method name (line 68) | fn name(&self) -> &'static str {
method modify_before_deserialization (line 72) | fn modify_before_deserialization(
FILE: aws/rust-runtime/aws-runtime/src/user_agent.rs
constant USER_AGENT_VERSION (line 19) | const USER_AGENT_VERSION: &str = "2.1";
type AwsUserAgent (line 31) | pub struct AwsUserAgent {
method new_from_environment (line 51) | pub fn new_from_environment(env: Env, api_metadata: ApiMetadata) -> Se...
method for_tests (line 95) | pub fn for_tests() -> Self {
method with_feature_metadata (line 132) | pub fn with_feature_metadata(mut self, _metadata: FeatureMetadata) -> ...
method add_feature_metadata (line 144) | pub fn add_feature_metadata(&mut self, _metadata: FeatureMetadata) -> ...
method with_config_metadata (line 156) | pub fn with_config_metadata(mut self, _metadata: ConfigMetadata) -> Se...
method add_config_metadata (line 168) | pub fn add_config_metadata(&mut self, _metadata: ConfigMetadata) -> &m...
method with_business_metric (line 174) | pub fn with_business_metric(mut self, metric: BusinessMetric) -> Self {
method add_business_metric (line 181) | pub fn add_business_metric(&mut self, metric: BusinessMetric) -> &mut ...
method with_framework_metadata (line 188) | pub fn with_framework_metadata(mut self, metadata: FrameworkMetadata) ...
method add_framework_metadata (line 195) | pub fn add_framework_metadata(&mut self, metadata: FrameworkMetadata) ...
method with_additional_metadata (line 201) | pub fn with_additional_metadata(mut self, metadata: AdditionalMetadata...
method add_additional_metadata (line 207) | pub fn add_additional_metadata(&mut self, metadata: AdditionalMetadata...
method with_app_name (line 213) | pub fn with_app_name(mut self, app_name: AppName) -> Self {
method set_app_name (line 219) | pub fn set_app_name(&mut self, app_name: AppName) -> &mut Self {
method aws_ua_header (line 227) | pub fn aws_ua_header(&self) -> String {
method ua_header (line 276) | pub fn ua_header(&self) -> String {
type Storer (line 287) | type Storer = StoreReplace<Self>;
type SdkMetadata (line 291) | struct SdkMetadata {
method fmt (line 297) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type UaMetadata (line 303) | struct UaMetadata {
method fmt (line 308) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type ApiMetadata (line 315) | pub struct ApiMetadata {
method new (line 322) | pub const fn new(service_id: &'static str, version: &'static str) -> S...
method fmt (line 331) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type Storer (line 337) | type Storer = StoreReplace<Self>;
type InvalidMetadataValue (line 349) | pub struct InvalidMetadataValue;
method fmt (line 354) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function validate_metadata (line 364) | fn validate_metadata(value: Cow<'static, str>) -> Result<Cow<'static, st...
type AdditionalMetadata (line 383) | pub struct AdditionalMetadata {
method new (line 395) | pub fn new(value: impl Into<Cow<'static, str>>) -> Result<Self, Invali...
method fmt (line 403) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type AdditionalMetadataList (line 410) | struct AdditionalMetadataList(Vec<AdditionalMetadata>);
method push (line 413) | fn push(&mut self, metadata: AdditionalMetadata) {
method fmt (line 419) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type FeatureMetadata (line 432) | pub struct FeatureMetadata {
method new (line 447) | pub fn new(
method with_additional (line 459) | pub fn with_additional(mut self, metadata: AdditionalMetadata) -> Self {
method fmt (line 467) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type ConfigMetadata (line 482) | pub struct ConfigMetadata {
method new (line 496) | pub fn new(
method fmt (line 509) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type FrameworkMetadata (line 523) | pub struct FrameworkMetadata {
method new (line 537) | pub fn new(
method with_additional (line 549) | pub fn with_additional(mut self, metadata: AdditionalMetadata) -> Self {
method fmt (line 556) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type OsMetadata (line 567) | struct OsMetadata {
method fmt (line 573) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type LanguageMetadata (line 591) | struct LanguageMetadata {
method fmt (line 597) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type ExecEnvMetadata (line 604) | struct ExecEnvMetadata {
method fmt (line 608) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function make_deterministic (line 621) | fn make_deterministic(ua: &mut AwsUserAgent) {
function generate_a_valid_ua (line 631) | fn generate_a_valid_ua() {
function generate_a_valid_ua_with_execution_env (line 649) | fn generate_a_valid_ua_with_execution_env() {
function generate_a_valid_ua_with_frameworks (line 670) | fn generate_a_valid_ua_with_frameworks() {
function generate_a_valid_ua_with_app_name (line 694) | fn generate_a_valid_ua_with_app_name() {
function generate_a_valid_ua_with_build_env_additional_metadata (line 713) | fn generate_a_valid_ua_with_build_env_additional_metadata() {
function generate_a_valid_ua_with_business_metrics (line 727) | fn generate_a_valid_ua_with_business_metrics() {
FILE: aws/rust-runtime/aws-runtime/src/user_agent/interceptor.rs
constant X_AMZ_USER_AGENT (line 59) | const X_AMZ_USER_AGENT: HeaderName = HeaderName::from_static("x-amz-user...
type UserAgentInterceptorError (line 62) | enum UserAgentInterceptorError {
method source (line 69) | fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
method fmt (line 79) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method from (line 89) | fn from(err: InvalidHeaderValue) -> Self {
method from (line 95) | fn from(err: InvalidMetadataValue) -> Self {
type UserAgentInterceptor (line 103) | pub struct UserAgentInterceptor;
method new (line 107) | pub fn new() -> Self {
function header_values (line 112) | fn header_values(
method name (line 124) | fn name(&self) -> &'static str {
method read_after_serialization (line 128) | fn read_after_serialization(
method modify_before_signing (line 156) | fn modify_before_signing(
function expect_header (line 205) | fn expect_header<'a>(context: &'a InterceptorContext, header_name: &str)...
function context (line 214) | fn context() -> InterceptorContext {
function test_overridden_ua (line 224) | fn test_overridden_ua() {
function test_default_ua (line 250) | fn test_default_ua() {
function test_modify_before_signing_no_duplicate_metrics (line 285) | fn test_modify_before_signing_no_duplicate_metrics() {
function test_metrics_order_preserved (line 325) | fn test_metrics_order_preserved() {
function test_app_name (line 359) | fn test_app_name() {
function test_api_metadata_missing (line 394) | fn test_api_metadata_missing() {
function test_api_metadata_missing_with_ua_override (line 417) | fn test_api_metadata_missing_with_ua_override() {
FILE: aws/rust-runtime/aws-runtime/src/user_agent/metrics.rs
constant MAX_COMMA_SEPARATED_METRICS_VALUES_LENGTH (line 14) | const MAX_COMMA_SEPARATED_METRICS_VALUES_LENGTH: usize = 1024;
constant MAX_METRICS_ID_NUMBER (line 16) | const MAX_METRICS_ID_NUMBER: usize = 350;
type Base64Iterator (line 40) | struct Base64Iterator {
method new (line 47) | fn new() -> Self {
method increment (line 59) | fn increment(&mut self) {
type Item (line 75) | type Item = String;
method next (line 77) | fn next(&mut self) -> Option<Self::Item> {
type ProvideBusinessMetric (line 182) | pub(crate) trait ProvideBusinessMetric {
method provide_business_metric (line 183) | fn provide_business_metric(&self) -> Option<BusinessMetric>;
method provide_business_metric (line 187) | fn provide_business_metric(&self) -> Option<BusinessMetric> {
method provide_business_metric (line 229) | fn provide_business_metric(&self) -> Option<BusinessMetric> {
method provide_business_metric (line 244) | fn provide_business_metric(&self) -> Option<BusinessMetric> {
type BusinessMetrics (line 293) | pub(super) struct BusinessMetrics(Vec<BusinessMetric>);
method push (line 296) | pub(super) fn push(&mut self, metric: BusinessMetric) {
method is_empty (line 300) | pub(super) fn is_empty(&self) -> bool {
method fmt (line 319) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function drop_unfinished_metrics_to_fit (line 305) | fn drop_unfinished_metrics_to_fit(csv: &str, max_len: usize) -> Cow<'_, ...
method fmt (line 353) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
function feature_id_to_metric_value (line 365) | fn feature_id_to_metric_value() {
function test_base64_iter (line 381) | fn test_base64_iter() {
function test_drop_unfinished_metrics_to_fit (line 400) | fn test_drop_unfinished_metrics_to_fit() {
FILE: aws/rust-runtime/aws-runtime/src/user_agent/test_util.rs
function check_ua_metric_values (line 16) | fn check_ua_metric_values(user_agent: &str, values: &[&str], should_cont...
function assert_ua_contains_metric_values (line 51) | pub fn assert_ua_contains_metric_values(user_agent: &str, values: &[&str...
function assert_ua_does_not_contain_metric_values (line 59) | pub fn assert_ua_does_not_contain_metric_values(user_agent: &str, values...
function extract_ua_values (line 64) | pub fn extract_ua_values(user_agent: &str) -> Option<Vec<&str>> {
function test_assert_ua_contains_metric_values (line 80) | fn test_assert_ua_contains_metric_values() {
function empty_ua_fails_assert (line 106) | fn empty_ua_fails_assert() {
function invalid_business_metrics_pattern_fails_assert (line 112) | fn invalid_business_metrics_pattern_fails_assert() {
function another_invalid_business_metrics_pattern_fails_assert (line 118) | fn another_invalid_business_metrics_pattern_fails_assert() {
function empty_metric_value_fails_assert (line 124) | fn empty_metric_value_fails_assert() {
function business_metrics_do_not_contain_given_metric_value (line 130) | fn business_metrics_do_not_contain_given_metric_value() {
function ua_containing_no_business_metrics_fails_assert (line 136) | fn ua_containing_no_business_metrics_fails_assert() {
function ua_containing_invalid_business_metrics_fails_assert (line 145) | fn ua_containing_invalid_business_metrics_fails_assert() {
FILE: aws/rust-runtime/aws-sigv4/benches/hmac.rs
function hmac (line 13) | pub fn hmac(c: &mut Criterion) {
function ring_multipart (line 25) | pub fn ring_multipart(c: &mut Criterion) {
function ring_one_shot (line 41) | pub fn ring_one_shot(c: &mut Criterion) {
FILE: aws/rust-runtime/aws-sigv4/benches/sigv4a.rs
function generate_signing_key (line 10) | pub fn generate_signing_key(c: &mut Criterion) {
FILE: aws/rust-runtime/aws-sigv4/src/date_time.rs
function truncate_subsecs (line 13) | pub(crate) fn truncate_subsecs(time: SystemTime) -> SystemTime {
function format_date (line 24) | pub(crate) fn format_date(time: SystemTime) -> String {
function format_date_time (line 35) | pub(crate) fn format_date_time(time: SystemTime) -> String {
constant DATE_TIME_FORMAT (line 55) | const DATE_TIME_FORMAT: &str = "[year][month][day]T[hour][minute][second...
constant DATE_FORMAT (line 56) | const DATE_FORMAT: &str = "[year][month][day]";
function parse_date_time (line 59) | pub(crate) fn parse_date_time(date_time_str: &str) -> Result<SystemTime,...
function parse_date (line 70) | pub(crate) fn parse_date(date_str: &str) -> Result<SystemTime, ParseErro...
type ParseError (line 81) | pub(crate) struct ParseError(Cow<'static, str>);
method fmt (line 84) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function date_format (line 101) | fn date_format() {
function date_time_format (line 115) | fn date_time_format() {
function date_time_roundtrip (line 127) | fn date_time_roundtrip() {
function date_roundtrip (line 133) | fn date_roundtrip() {
function test_truncate_subsecs (line 141) | fn test_truncate_subsecs() {
FILE: aws/rust-runtime/aws-sigv4/src/event_stream.rs
type SigningParams (line 61) | pub type SigningParams<'a> = crate::sign::v4::SigningParams<'a, ()>;
function calculate_string_to_sign (line 64) | fn calculate_string_to_sign(
function sign_message (line 99) | pub fn sign_message<'a>(
function sign_empty_message (line 117) | pub fn sign_empty_message<'a>(
function sign_payload (line 124) | fn sign_payload<'a>(
function string_to_sign (line 170) | fn string_to_sign() {
function sign (line 209) | fn sign() {
FILE: aws/rust-runtime/aws-sigv4/src/http_request.rs
type SigningParams (line 85) | pub enum SigningParams<'a> {
function from (line 94) | fn from(value: v4::SigningParams<'a, SigningSettings>) -> Self {
function from (line 101) | fn from(value: v4a::SigningParams<'a, SigningSettings>) -> Self {
function credentials (line 108) | pub(crate) fn credentials(&self) -> Result<&Credentials, SigningError> {
function region (line 121) | pub fn region(&self) -> Option<&str> {
function region_set (line 131) | pub fn region_set(&self) -> Option<&str> {
function settings (line 139) | pub fn settings(&self) -> &SigningSettings {
function settings_mut (line 148) | pub fn settings_mut(&mut self) -> &mut SigningSettings {
function set_payload_checksum_kind (line 158) | pub fn set_payload_checksum_kind(&mut self, kind: PayloadChecksumKind) {
function set_session_token_mode (line 166) | pub fn set_session_token_mode(&mut self, mode: SessionTokenMode) {
function time (line 173) | pub fn time(&self) -> &SystemTime {
function name (line 182) | pub fn name(&self) -> &str {
function algorithm (line 191) | pub fn algorithm(&self) -> &'static str {
function signature_version (line 200) | pub fn signature_version(&self) -> SignatureVersion {
FILE: aws/rust-runtime/aws-sigv4/src/http_request/canonical_request.rs
constant X_AMZ_CONTENT_SHA_256 (line 31) | pub(crate) const X_AMZ_CONTENT_SHA_256: &str = "x-amz-content-sha256";
constant X_AMZ_DATE (line 32) | pub(crate) const X_AMZ_DATE: &str = "x-amz-date";
constant X_AMZ_SECURITY_TOKEN (line 33) | pub(crate) const X_AMZ_SECURITY_TOKEN: &str = "x-amz-security-token";
constant X_AMZ_USER_AGENT (line 34) | pub(crate) const X_AMZ_USER_AGENT: &str = "x-amz-user-agent";
constant X_AMZ_CHECKSUM_MODE (line 35) | pub(crate) const X_AMZ_CHECKSUM_MODE: &str = "x-amz-checksum-mode";
constant X_AMZ_ALGORITHM (line 39) | pub(crate) const X_AMZ_ALGORITHM: &str = "X-Amz-Algorithm";
constant X_AMZ_CREDENTIAL (line 40) | pub(crate) const X_AMZ_CREDENTIAL: &str = "X-Amz-Credential";
constant X_AMZ_DATE (line 41) | pub(crate) const X_AMZ_DATE: &str = "X-Amz-Date";
constant X_AMZ_EXPIRES (line 42) | pub(crate) const X_AMZ_EXPIRES: &str = "X-Amz-Expires";
constant X_AMZ_SECURITY_TOKEN (line 43) | pub(crate) const X_AMZ_SECURITY_TOKEN: &str = "X-Amz-Security-Token";
constant X_AMZ_SIGNED_HEADERS (line 44) | pub(crate) const X_AMZ_SIGNED_HEADERS: &str = "X-Amz-SignedHeaders";
constant X_AMZ_SIGNATURE (line 45) | pub(crate) const X_AMZ_SIGNATURE: &str = "X-Amz-Signature";
constant UNSIGNED_PAYLOAD (line 48) | const UNSIGNED_PAYLOAD: &str = "UNSIGNED-PAYLOAD";
constant STREAMING_UNSIGNED_PAYLOAD_TRAILER (line 49) | const STREAMING_UNSIGNED_PAYLOAD_TRAILER: &str = "STREAMING-UNSIGNED-PAY...
constant STREAMING_SIGNED_PAYLOAD_TRAILER (line 50) | const STREAMING_SIGNED_PAYLOAD_TRAILER: &str = "STREAMING-AWS4-HMAC-SHA2...
type HeaderValues (line 53) | pub(crate) struct HeaderValues<'a> {
type QueryParamValues (line 63) | pub(crate) struct QueryParamValues<'a> {
type SignatureValues (line 76) | pub(crate) enum SignatureValues<'a> {
function signed_headers (line 82) | pub(crate) fn signed_headers(&self) -> &SignedHeaders {
function content_sha256 (line 89) | fn content_sha256(&self) -> &str {
function as_headers (line 96) | pub(crate) fn as_headers(&self) -> Option<&HeaderValues<'_>> {
function into_query_params (line 110) | pub(crate) fn into_query_params(self) -> Result<QueryParamValues<'a>, Se...
type CanonicalRequest (line 119) | pub(crate) struct CanonicalRequest<'a> {
function from (line 144) | pub(crate) fn from<'b>(
function headers (line 235) | fn headers(
function payload_hash (line 317) | fn payload_hash<'b>(body: &'b SignableBody<'b>) -> Cow<'b, str> {
function params (line 341) | fn params(
function insert_host_header (line 407) | fn insert_host_header(
function insert_date_header (line 443) | fn insert_date_header(
function header_values_for (line 453) | fn header_values_for(&self, key: impl AsHeaderName) -> String {
function fmt (line 468) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function trim_all (line 489) | fn trim_all(text: &str) -> Cow<'_, str> {
function normalize_header_value (line 513) | fn normalize_header_value(header_value: &str) -> Result<HeaderValue, Can...
function is_port_scheme_default (line 519) | fn is_port_scheme_default(scheme: Option<&Scheme>, port: Option<Port<&st...
type SignedHeaders (line 528) | pub(crate) struct SignedHeaders {
method new (line 534) | fn new(mut headers: Vec<CanonicalHeaderName>) -> Self {
method fmt (line 540) | fn fmt(headers: &[CanonicalHeaderName]) -> String {
method as_str (line 552) | pub(crate) fn as_str(&self) -> &str {
method fmt (line 558) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type CanonicalHeaderName (line 564) | struct CanonicalHeaderName(HeaderName);
method partial_cmp (line 567) | fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
method cmp (line 573) | fn cmp(&self, other: &Self) -> Ordering {
type SigningScope (line 579) | pub(crate) struct SigningScope<'a> {
function v4a_display (line 586) | pub(crate) fn v4a_display(&self) -> String {
function fmt (line 592) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type StringToSign (line 604) | pub(crate) struct StringToSign<'a> {
function new_v4 (line 615) | pub(crate) fn new_v4(
function new_v4a (line 638) | pub(crate) fn new_v4a(
function fmt (line 664) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function signing_params (line 702) | fn signing_params(identity: &Identity, settings: SigningSettings) -> Sig...
function test_repeated_header (line 715) | fn test_repeated_header() {
function test_host_header_properly_handles_ports (line 747) | fn test_host_header_properly_handles_ports() {
function test_set_xamz_sha_256 (line 782) | fn test_set_xamz_sha_256() {
function test_unsigned_payload (line 810) | fn test_unsigned_payload() {
function test_precomputed_payload (line 828) | fn test_precomputed_payload() {
function test_generate_scope (line 846) | fn test_generate_scope() {
function test_string_to_sign (line 857) | fn test_string_to_sign() {
function test_digest_of_canonical_request (line 869) | fn test_digest_of_canonical_request() {
function test_double_url_encode_path (line 878) | fn test_double_url_encode_path() {
function test_double_url_encode (line 892) | fn test_double_url_encode() {
function test_tilde_in_uri (line 905) | fn test_tilde_in_uri() {
function test_signing_urls_with_percent_encoded_query_strings (line 919) | fn test_signing_urls_with_percent_encoded_query_strings() {
function test_omit_session_token (line 943) | fn test_omit_session_token() {
function non_presigning_header_exclusion (line 975) | fn non_presigning_header_exclusion() {
function presigning_header_exclusion (line 1008) | fn presigning_header_exclusion() {
function valid_input (line 1041) | fn valid_input(input: &Vec<String>) -> bool {
function test_trim_all_handles_spaces_correctly (line 1095) | fn test_trim_all_handles_spaces_correctly() {
function test_trim_all_ignores_other_forms_of_whitespace (line 1107) | fn test_trim_all_ignores_other_forms_of_whitespace() {
function trim_spaces_works_on_single_characters (line 1116) | fn trim_spaces_works_on_single_characters() {
FILE: aws/rust-runtime/aws-sigv4/src/http_request/canonical_request/sigv4a.rs
constant X_AMZ_REGION_SET (line 7) | pub(crate) const X_AMZ_REGION_SET: &str = "x-amz-region-set";
constant X_AMZ_REGION_SET (line 11) | pub(crate) const X_AMZ_REGION_SET: &str = "X-Amz-Region-Set";
FILE: aws/rust-runtime/aws-sigv4/src/http_request/error.rs
type SigningErrorKind (line 12) | enum SigningErrorKind {
type SigningError (line 19) | pub struct SigningError {
method unsupported_identity_type (line 24) | pub(crate) fn unsupported_identity_type() -> Self {
method fmt (line 32) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method from (line 54) | fn from(source: CanonicalRequestError) -> Self {
method source (line 45) | fn source(&self) -> Option<&(dyn Error + 'static)> {
type CanonicalRequestErrorKind (line 62) | enum CanonicalRequestErrorKind {
type CanonicalRequestError (line 70) | pub(crate) struct CanonicalRequestError {
method fmt (line 75) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method unsupported_identity_type (line 101) | pub(crate) fn unsupported_identity_type() -> Self {
method from (line 109) | fn from(source: InvalidHeaderName) -> Self {
method from (line 117) | fn from(source: InvalidHeaderValue) -> Self {
method from (line 125) | fn from(source: InvalidUri) -> Self {
method source (line 89) | fn source(&self) -> Option<&(dyn Error + 'static)> {
FILE: aws/rust-runtime/aws-sigv4/src/http_request/settings.rs
constant HEADER_NAME_X_RAY_TRACE_ID (line 10) | const HEADER_NAME_X_RAY_TRACE_ID: &str = "x-amzn-trace-id";
type SigningSettings (line 15) | pub struct SigningSettings {
type PayloadChecksumKind (line 49) | pub enum PayloadChecksumKind {
type PercentEncodingMode (line 68) | pub enum PercentEncodingMode {
type UriPathNormalizationMode (line 82) | pub enum UriPathNormalizationMode {
method from (line 91) | fn from(value: bool) -> Self {
type SessionTokenMode (line 104) | pub enum SessionTokenMode {
method default (line 113) | fn default() -> Self {
type SignatureLocation (line 150) | pub enum SignatureLocation {
FILE: aws/rust-runtime/aws-sigv4/src/http_request/sign.rs
constant LOG_SIGNABLE_BODY (line 22) | const LOG_SIGNABLE_BODY: &str = "LOG_SIGNABLE_BODY";
type SignableRequest (line 27) | pub struct SignableRequest<'a> {
function new (line 38) | pub fn new(
function uri (line 58) | pub(crate) fn uri(&self) -> &Uri {
function method (line 63) | pub(crate) fn method(&self) -> &str {
function headers (line 68) | pub(crate) fn headers(&self) -> &[(&str, &str)] {
function body (line 73) | pub fn body(&self) -> &SignableBody<'_> {
type SignableBody (line 81) | pub enum SignableBody<'a> {
method fmt (line 105) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
function empty (line 132) | pub fn empty() -> SignableBody<'static> {
type SigningInstructions (line 139) | pub struct SigningInstructions {
method new (line 183) | fn new(headers: Vec<Header>, params: Vec<(&'static str, Cow<'static, s...
method into_parts (line 188) | pub fn into_parts(self) -> (Vec<Header>, Vec<(&'static str, Cow<'stati...
method headers (line 193) | pub fn headers(&self) -> impl Iterator<Item = (&str, &str)> {
method params (line 200) | pub fn params(&self) -> &[(&str, Cow<'static, str>)] {
method apply_to_request_http0x (line 206) | pub fn apply_to_request_http0x<B>(self, request: &mut http0::Request<B...
method apply_to_request_http1x (line 230) | pub fn apply_to_request_http1x<B>(self, request: &mut http::Request<B>) {
type Header (line 145) | pub struct Header {
method name (line 167) | pub fn name(&self) -> &'static str {
method value (line 172) | pub fn value(&self) -> &str {
method sensitive (line 177) | pub fn sensitive(&self) -> bool {
method fmt (line 152) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
function sign (line 259) | pub fn sign<'a>(
type CalculatedParams (line 283) | type CalculatedParams = Vec<(&'static str, Cow<'static, str>)>;
function calculate_signing_params (line 285) | fn calculate_signing_params<'a>(
function calculate_signing_headers (line 363) | fn calculate_signing_headers<'a>(
function add_header (line 487) | fn add_header(map: &mut Vec<Header>, key: &'static str, value: &str, sen...
function build_authorization_header (line 497) | fn build_authorization_header(
function make_headers_comparable (line 547) | pub(crate) fn make_headers_comparable<B>(request: &mut Request<B>) {
function test_get_header_key_duplicate (line 559) | fn test_get_header_key_duplicate() {
function test_get_header_value_multiline (line 565) | fn test_get_header_value_multiline() {
function test_get_header_value_order (line 570) | fn test_get_header_value_order() {
function test_get_header_value_trim (line 575) | fn test_get_header_value_trim() {
function test_get_relative_normalized (line 580) | fn test_get_relative_normalized() {
function test_get_relative_relative_normalized (line 585) | fn test_get_relative_relative_normalized() {
function test_get_relative_relative_unnormalized (line 590) | fn test_get_relative_relative_unnormalized() {
function test_get_relative_unnormalized (line 595) | fn test_get_relative_unnormalized() {
function test_get_slash_dot_slash_normalized (line 600) | fn test_get_slash_dot_slash_normalized() {
function test_get_slash_dot_slash_unnormalized (line 605) | fn test_get_slash_dot_slash_unnormalized() {
function test_get_slash_normalized (line 610) | fn test_get_slash_normalized() {
function test_get_slash_pointless_dot_normalized (line 615) | fn test_get_slash_pointless_dot_normalized() {
function test_get_slash_pointless_dot_unnormalized (line 620) | fn test_get_slash_pointless_dot_unnormalized() {
function test_get_slash_unnormalized (line 625) | fn test_get_slash_unnormalized() {
function test_get_slashes_normalized (line 630) | fn test_get_slashes_normalized() {
function test_get_slashes_unnormalized (line 635) | fn test_get_slashes_unnormalized() {
function test_get_space_normalized (line 643) | fn test_get_space_normalized() {
function test_get_space_unnormalized (line 650) | fn test_get_space_unnormalized() {
function test_get_unreserved (line 655) | fn test_get_unreserved() {
function test_get_utf8 (line 662) | fn test_get_utf8() {
function test_get_vanilla (line 667) | fn test_get_vanilla() {
function test_get_vanilla_empty_query_key (line 672)
Copy disabled (too large)
Download .json
Condensed preview — 3358 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (43,983K chars).
[
{
"path": ".cargo/config.toml",
"chars": 132,
"preview": "[build]\n# Share one `target` directory at the project root for all Cargo projects and workspaces in smithy-rs\ntarget-dir"
},
{
"path": ".cargo-deny-config.toml",
"chars": 2187,
"preview": "# This is the config file for `cargo-deny` used in CI\n\n# This section is considered when running `cargo deny check licen"
},
{
"path": ".changelog/.example",
"chars": 368,
"preview": "# Example changelog entry, Markdown with YAML front matter\n# ---\n# applies_to: [\"client\", \"server\", \"aws-sdk-rust\"] # \"a"
},
{
"path": ".editorconfig",
"chars": 725,
"preview": "[*.{kt,kts}]\nij_kotlin_allow_trailing_comma = true\nij_kotlin_allow_trailing_comma_on_call_site = true\nij_java_use_single"
},
{
"path": ".git-blame-ignore-revs",
"chars": 364,
"preview": "# .git-blame-ignore-revs\n#\n# To make use of this file when running `git blame`, add `--ignore-revs-file .git-blame-ignor"
},
{
"path": ".github/ISSUE_TEMPLATE/blank_issue.md",
"chars": 55,
"preview": "---\nname: Blank Issue\nabout: Create a blank issue.\n---\n"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 28,
"preview": "blank_issues_enabled: false\n"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 1122,
"preview": "## Motivation and Context\n<!--- Why is this change required? What problem does it solve? -->\n<!--- If it fixes an open i"
},
{
"path": ".github/actions/docker-build/action.yml",
"chars": 3167,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n# Use this a"
},
{
"path": ".github/actions/download-all-artifacts/action.yml",
"chars": 428,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\nname: Downlo"
},
{
"path": ".github/actions/free-disk-space/action.yml",
"chars": 372,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\nname: 'Free "
},
{
"path": ".github/scripts/README.md",
"chars": 3832,
"preview": "# GitHub Actions Scripts\n\nThis directory contains scripts used in the smithy-rs CI/CD workflows.\n\n## acquire-build-image"
},
{
"path": ".github/scripts/acquire-build-image",
"chars": 22832,
"preview": "#!/usr/bin/env -S python3 -u\n#\n# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Ident"
},
{
"path": ".github/scripts/docker-image-hash",
"chars": 408,
"preview": "#!/bin/bash\n#\n# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0"
},
{
"path": ".github/scripts/get-or-create-release-branch.sh",
"chars": 1809,
"preview": "#!/bin/bash\n#\n# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0"
},
{
"path": ".github/scripts/upload-build-image.sh",
"chars": 1294,
"preview": "#!/bin/bash\n#\n# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0"
},
{
"path": ".github/workflows/backport-pull-request.yml",
"chars": 2089,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\nname: Open a"
},
{
"path": ".github/workflows/ci-main.yml",
"chars": 2785,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n# This workf"
},
{
"path": ".github/workflows/ci-pr-forks.yml",
"chars": 3436,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n# This workf"
},
{
"path": ".github/workflows/ci-pr.yml",
"chars": 7083,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n# This workf"
},
{
"path": ".github/workflows/ci-tls.yml",
"chars": 2962,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n# This workf"
},
{
"path": ".github/workflows/ci.yml",
"chars": 18119,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n# This is th"
},
{
"path": ".github/workflows/claim-crate-names.yml",
"chars": 2548,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n# This workf"
},
{
"path": ".github/workflows/credentials-verification.yml",
"chars": 2264,
"preview": "name: Daily credentials verification\non:\n schedule:\n # Runs 00:00 UTC every day\n - cron: 0 0 * * *\n workflow_dispa"
},
{
"path": ".github/workflows/dry-run-release-scheduled.yml",
"chars": 1766,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n# This workf"
},
{
"path": ".github/workflows/dry-run-release.yml",
"chars": 2057,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n# This workf"
},
{
"path": ".github/workflows/github-pages.yml",
"chars": 1486,
"preview": "on:\n workflow_dispatch:\n push:\n branches: [main]\n paths:\n - design/**\n\nname: Update GitHub Pages\n\nenv:\n rust"
},
{
"path": ".github/workflows/manual-canary.yml",
"chars": 3934,
"preview": "# This workflow allows maintainers to manually run the canary given an external contributor's pull request created from\n"
},
{
"path": ".github/workflows/manual-pull-request-bot.yml",
"chars": 3314,
"preview": "# This workflow allows maintainers to manually run the PR bot on a pull request to work around permissions\n# issues that"
},
{
"path": ".github/workflows/manual-update-lockfiles.yml",
"chars": 1488,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\nname: Update"
},
{
"path": ".github/workflows/prod-release.yml",
"chars": 1917,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n# This workf"
},
{
"path": ".github/workflows/pull-request-bot.yml",
"chars": 6727,
"preview": "# This job will generate a codegen diff, upload it to S3, and link to it in a comment on the PR.\nname: PR Bot\non:\n work"
},
{
"path": ".github/workflows/pull-request-updating-lockfiles.yml",
"chars": 5102,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n# This is a "
},
{
"path": ".github/workflows/release-scripts/create-release.js",
"chars": 3938,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// "
},
{
"path": ".github/workflows/release.yml",
"chars": 17169,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n# This is th"
},
{
"path": ".github/workflows/update-lockfiles.yml",
"chars": 916,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\nname: Update"
},
{
"path": ".github/workflows/update-sdk-next.yml",
"chars": 2198,
"preview": "# This workflow updates the `next` branch with freshly generated\n# code from the latest smithy-rs and models that reside"
},
{
"path": ".gitignore",
"chars": 834,
"preview": "# attn: Intellij related ignores belong in ~/.gitignore\n# Java/Kotlin\n# Compiled class file\n*.class\n\n# Log file\n*.log\n\n#"
},
{
"path": ".pre-commit-config.yaml",
"chars": 1419,
"preview": "repos:\n- repo: https://github.com/pre-commit/pre-commit-hooks\n rev: v4.4.0\n hooks:\n - id: check-yaml\n - id: end-of-f"
},
{
"path": ".pre-commit-hooks/kotlin-block-quotes.py",
"chars": 11689,
"preview": "#!/usr/bin/env python\n\n# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier:"
},
{
"path": ".pre-commit-hooks/ktlint.sh",
"chars": 463,
"preview": "#!/bin/bash\n#\n# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0"
},
{
"path": ".pre-commit-hooks/runtime-versioner.sh",
"chars": 224,
"preview": "#!/bin/bash\n#\n# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0"
},
{
"path": ".pre-commit-hooks/sdk-lints.sh",
"chars": 222,
"preview": "#!/bin/bash\n#\n# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0"
},
{
"path": "AGENTS.md",
"chars": 10411,
"preview": "# Smithy-rs AI Agent Guide\n\n## Package Layout\n\n- **`codegen-core/`** - Shared codegen\n- **`codegen-server/`** - Server c"
},
{
"path": "CHANGELOG.md",
"chars": 216836,
"preview": "<!-- Do not manually edit this file. Use the `changelogger` tool. -->\nApril 16th, 2026\n================\n**Breaking Chang"
},
{
"path": "CODEOWNERS",
"chars": 3506,
"preview": "* @smithy-lang/aws-sdk-rust\n\n# Server\n/codegen-server-test/ "
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 309,
"preview": "## Code of Conduct\nThis project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-condu"
},
{
"path": "CONTRIBUTING.md",
"chars": 5148,
"preview": "# Contributing Guidelines\n\nThank you for your interest in contributing to our project. Whether it's a bug report, new fe"
},
{
"path": "LICENSE",
"chars": 10142,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "NOTICE",
"chars": 67,
"preview": "Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n"
},
{
"path": "README.md",
"chars": 5492,
"preview": "Smithy Rust [](h"
},
{
"path": "aws/SDK_CHANGELOG.next.json",
"chars": 7915,
"preview": "# This file will be used by automation when cutting a release of the SDK\n# to include code generator change log entries "
},
{
"path": "aws/SDK_README.md.hb",
"chars": 6047,
"preview": "{{!--\nThis is the README Handlebars template for `aws-sdk-rust`.\nIt gets instantiated and copied into the build artifact"
},
{
"path": "aws/codegen-aws-sdk/build.gradle.kts",
"chars": 978,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nplu"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/AccountIdEndpointParamsDecorator.kt",
"chars": 14783,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/AwsCargoDependency.kt",
"chars": 1180,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/AwsChunkedContentEncodingDecorator.kt",
"chars": 9864,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/AwsCodegenDecorator.kt",
"chars": 7476,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/AwsCrateDocsDecorator.kt",
"chars": 16626,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/AwsDocs.kt",
"chars": 5664,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/AwsFluentClientDecorator.kt",
"chars": 10586,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/AwsPresigningDecorator.kt",
"chars": 22394,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/AwsRequestIdDecorator.kt",
"chars": 1129,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/AwsRuntimeType.kt",
"chars": 2936,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/BaseRequestIdDecorator.kt",
"chars": 12304,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/CrateLicenseDecorator.kt",
"chars": 858,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/CredentialProvidersDecorator.kt",
"chars": 7600,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/DisablePayloadSigningDecorator.kt",
"chars": 3385,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/EndpointBasedAuthSchemeDecorator.kt",
"chars": 4393,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/EndpointBuiltInsDecorator.kt",
"chars": 11678,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/EndpointOverrideMetricDecorator.kt",
"chars": 4550,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/HttpRequestChecksumDecorator.kt",
"chars": 19707,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/HttpRequestCompressionDecorator.kt",
"chars": 7370,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/HttpResponseChecksumDecorator.kt",
"chars": 15783,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/InlineAwsDependency.kt",
"chars": 1130,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/IntegrationTestDependencies.kt",
"chars": 10780,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/InvocationIdDecorator.kt",
"chars": 5188,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/ObservabilityMetricDecorator.kt",
"chars": 2546,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/RecursionDetectionDecorator.kt",
"chars": 1923,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/RegionDecorator.kt",
"chars": 11669,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/RetryClassifierDecorator.kt",
"chars": 2136,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/RetryInformationHeaderDecorator.kt",
"chars": 2240,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/SdkConfigDecorator.kt",
"chars": 8979,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/SdkSettings.kt",
"chars": 3549,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\npack"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/ServiceConfigDecorator.kt",
"chars": 2209,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/ServiceEnvConfigDecorator.kt",
"chars": 1752,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/SigV4AuthDecorator.kt",
"chars": 18704,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/SmokeTestsDecorator.kt",
"chars": 12582,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/SpanDecorator.kt",
"chars": 1845,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/TokenProvidersDecorator.kt",
"chars": 6334,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\npack"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/UserAgentDecorator.kt",
"chars": 8669,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/AwsDisableStalledStreamProtection.kt",
"chars": 2457,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/DisabledAuthDecorator.kt",
"chars": 1844,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/EnvironmentTokenProviderDecorator.kt",
"chars": 6914,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/IsTruncatedPaginatorDecorator.kt",
"chars": 1842,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/RemoveDefaults.kt",
"chars": 2771,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/RemoveDefaultsDecorator.kt",
"chars": 4846,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/ServiceSpecificDecorator.kt",
"chars": 1518,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/Sigv4aAuthTraitBackfillDecorator.kt",
"chars": 3415,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/apigateway/ApiGatewayDecorator.kt",
"chars": 2630,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/dsql/DsqlDecorator.kt",
"chars": 1792,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\npack"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/ec2/BoxPrimitiveShapes.kt",
"chars": 2223,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/ec2/EC2MakePrimitivesOptional.kt",
"chars": 805,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/ec2/Ec2Decorator.kt",
"chars": 871,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/glacier/GlacierDecorator.kt",
"chars": 8048,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/rds/RdsDecorator.kt",
"chars": 1788,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\npack"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/route53/Route53Decorator.kt",
"chars": 4847,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\npack"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/route53/TrimResourceId.kt",
"chars": 582,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/s3/MakeS3BoolsAndNumbersOptional.kt",
"chars": 1636,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/s3/S3Decorator.kt",
"chars": 12701,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/s3/S3ExpiresDecorator.kt",
"chars": 6791,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/s3/S3ExpressDecorator.kt",
"chars": 12878,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/s3/S3ExtendedRequestIdDecorator.kt",
"chars": 1357,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/s3/StripBucketFromPath.kt",
"chars": 1980,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/s3control/S3ControlDecorator.kt",
"chars": 2328,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/sso/SSODecorator.kt",
"chars": 1478,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/sts/STSDecorator.kt",
"chars": 2271,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\npack"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/customize/timestream/TimestreamDecorator.kt",
"chars": 6306,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/endpoints/AwsEndpointsStdLib.kt",
"chars": 2792,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/endpoints/OperationInputTestGenerator.kt",
"chars": 13273,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/endpoints/RequireEndpointRules.kt",
"chars": 1316,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/endpoints/StripEndpointTrait.kt",
"chars": 704,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/traits/PresignableTrait.kt",
"chars": 698,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/main/resources/LICENSE",
"chars": 11390,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "aws/codegen-aws-sdk/src/main/resources/META-INF/services/software.amazon.smithy.rust.codegen.client.smithy.customize.ClientCodegenDecorator",
"chars": 163,
"preview": "#\n# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n#\n\nsoftware"
},
{
"path": "aws/codegen-aws-sdk/src/main/resources/default-partitions.json",
"chars": 7015,
"preview": "{\n \"partitions\" : [ {\n \"id\" : \"aws\",\n \"outputs\" : {\n \"dnsSuffix\" : \"amazonaws.com\",\n \"dualStackDnsSuffi"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/AwsCrateDocsDecoratorTest.kt",
"chars": 3394,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimp"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/SdkCodegenIntegrationTest.kt",
"chars": 1790,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimp"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/AwsPresigningDecoratorTest.kt",
"chars": 7584,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/CredentialProviderConfigTest.kt",
"chars": 14573,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/EndpointBuiltInsDecoratorTest.kt",
"chars": 11669,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/EndpointOverrideMetricDecoratorTest.kt",
"chars": 10325,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/EndpointsCredentialsTest.kt",
"chars": 6311,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/HttpChecksumTest.kt",
"chars": 37981,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/HttpRequestCompressionDecoratorTest.kt",
"chars": 21479,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/InvocationIdDecoratorTest.kt",
"chars": 2848,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/OperationInputTestGeneratorTests.kt",
"chars": 3556,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/RegionDecoratorTest.kt",
"chars": 5925,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\npack"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/RegionProviderConfigTest.kt",
"chars": 743,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/RetryPartitionTest.kt",
"chars": 8885,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\npack"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/SigV4AuthDecoratorTest.kt",
"chars": 7398,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\npack"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/SmokeTestsDecoratorTest.kt",
"chars": 12871,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/TestUtil.kt",
"chars": 3759,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/TimeoutConfigMergingTest.kt",
"chars": 8315,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/TokenProvidersDecoratorTest.kt",
"chars": 2695,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/UserAgentDecoratorTest.kt",
"chars": 17774,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/customize/IsTruncatedPaginatorTest.kt",
"chars": 6718,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/customize/RemoveDefaultsTest.kt",
"chars": 1607,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/customize/ec2/EC2MakePrimitivesOptionalTest.kt",
"chars": 1634,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/codegen-aws-sdk/src/test/kotlin/software/amazon/smithy/rustsdk/customize/s3/S3ExpiresDecoratorTest.kt",
"chars": 3643,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\npac"
},
{
"path": "aws/rust-runtime/.gitignore",
"chars": 8,
"preview": "target/\n"
},
{
"path": "aws/rust-runtime/Cargo.toml",
"chars": 340,
"preview": "# Note: this workspace exists solely for the convenience of running tests. These packages will all eventually\n# end up i"
},
{
"path": "aws/rust-runtime/aws-config/Cargo.toml",
"chars": 5389,
"preview": "[package]\nname = \"aws-config\"\nversion = \"1.8.16\"\nauthors = [\n \"AWS Rust SDK Team <aws-sdk-rust@amazon.com>\",\n \"Rus"
},
{
"path": "aws/rust-runtime/aws-config/LICENSE",
"chars": 10142,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "aws/rust-runtime/aws-config/README.md",
"chars": 2631,
"preview": "# aws-config\n\nAWS SDK config and credential provider implementations.\n\n The implementations can be used either via the d"
},
{
"path": "aws/rust-runtime/aws-config/clippy.toml",
"chars": 377,
"preview": "# this file is named `clippy-root.toml` so it isn't picked up automagically. Clippy\n# will search up the filesystem for "
},
{
"path": "aws/rust-runtime/aws-config/examples/imds.rs",
"chars": 769,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n///"
},
{
"path": "aws/rust-runtime/aws-config/external-types.toml",
"chars": 2204,
"preview": "# IMPORTANT: Types from `aws-sdk-*` crates MUST NOT be allowed to be\n# exposed in `aws-config`'s public API. Otherwise, "
},
{
"path": "aws/rust-runtime/aws-config/fuzz/.gitignore",
"chars": 25,
"preview": "\ntarget\ncorpus\nartifacts\n"
},
{
"path": "aws/rust-runtime/aws-config/fuzz/Cargo.toml",
"chars": 559,
"preview": "\n[package]\nname = \"aws-types-fuzz\"\nversion = \"0.0.0\"\nauthors = [\"Automatically generated\"]\npublish = false\nedition = \"20"
},
{
"path": "aws/rust-runtime/aws-config/fuzz/fuzz_targets/profile-parser.rs",
"chars": 870,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#!["
},
{
"path": "aws/rust-runtime/aws-config/integration-tests/eks-credentials/.gitignore",
"chars": 93,
"preview": "*.js\n!jest.config.js\n*.d.ts\nnode_modules\n\n# CDK asset staging directory\n.cdk.staging\ncdk.out\n"
},
{
"path": "aws/rust-runtime/aws-config/integration-tests/eks-credentials/.npmignore",
"chars": 65,
"preview": "*.ts\n!*.d.ts\n\n# CDK asset staging directory\n.cdk.staging\ncdk.out\n"
},
{
"path": "aws/rust-runtime/aws-config/integration-tests/eks-credentials/README.md",
"chars": 710,
"preview": "# CDK Stack for EKS credentials provider testing\n\nThis project defines a CDK stack that launches an EKS cluster, creates"
},
{
"path": "aws/rust-runtime/aws-config/integration-tests/eks-credentials/bin/eks-credentials.ts",
"chars": 1090,
"preview": "#!/usr/bin/env node\n/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier:"
},
{
"path": "aws/rust-runtime/aws-config/integration-tests/eks-credentials/cdk.json",
"chars": 87,
"preview": "{\n \"app\": \"npx ts-node --prefer-ts-exts bin/eks-credentials.ts\",\n \"context\": {\n }\n}\n"
},
{
"path": "aws/rust-runtime/aws-config/integration-tests/eks-credentials/jest.config.js",
"chars": 274,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nmod"
},
{
"path": "aws/rust-runtime/aws-config/integration-tests/eks-credentials/lib/eks-credentials-stack.ts",
"chars": 3869,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimp"
},
{
"path": "aws/rust-runtime/aws-config/integration-tests/eks-credentials/package.json",
"chars": 491,
"preview": "{\n \"name\": \"eks-credentials\",\n \"version\": \"0.1.0\",\n \"license\": \"Apache-2.0\",\n \"private\": true,\n \"bin\": {\n \"eks-c"
},
{
"path": "aws/rust-runtime/aws-config/integration-tests/eks-credentials/test.rs",
"chars": 537,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/integration-tests/eks-credentials/tsconfig.json",
"chars": 650,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2018\",\n \"module\": \"commonjs\",\n \"lib\": [\n \"es2018\"\n ],\n \"decla"
},
{
"path": "aws/rust-runtime/aws-config/src/credential_process.rs",
"chars": 14458,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#!["
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider/account_id_endpoint_mode.rs",
"chars": 3220,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider/app_name.rs",
"chars": 5859,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider/auth_scheme_preference.rs",
"chars": 6976,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider/checksums.rs",
"chars": 9186,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider/credentials.rs",
"chars": 14328,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider/disable_request_compression.rs",
"chars": 4004,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider/endpoint_url.rs",
"chars": 3739,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider/ignore_configured_endpoint_urls.rs",
"chars": 3280,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider/region.rs",
"chars": 2413,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider/request_min_compression_size_bytes.rs",
"chars": 4189,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider/retry_config.rs",
"chars": 12209,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider/sigv4a_signing_region_set.rs",
"chars": 5664,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider/timeout_config.rs",
"chars": 1314,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider/token.rs",
"chars": 4197,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider/use_dual_stack.rs",
"chars": 3670,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider/use_fips.rs",
"chars": 2793,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/default_provider.rs",
"chars": 3217,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n//!"
},
{
"path": "aws/rust-runtime/aws-config/src/ecs.rs",
"chars": 36060,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n//!"
},
{
"path": "aws/rust-runtime/aws-config/src/env_service_config.rs",
"chars": 848,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/environment/credentials.rs",
"chars": 8993,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/environment/mod.rs",
"chars": 2111,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n//!"
},
{
"path": "aws/rust-runtime/aws-config/src/environment/region.rs",
"chars": 2569,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nuse"
},
{
"path": "aws/rust-runtime/aws-config/src/http_credential_provider.rs",
"chars": 13961,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n//!"
},
{
"path": "aws/rust-runtime/aws-config/src/imds/client/error.rs",
"chars": 7860,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n//!"
},
{
"path": "aws/rust-runtime/aws-config/src/imds/client/token.rs",
"chars": 9336,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n//!"
},
{
"path": "aws/rust-runtime/aws-config/src/imds/client.rs",
"chars": 47770,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n//!"
},
{
"path": "aws/rust-runtime/aws-config/src/imds/credentials.rs",
"chars": 25732,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n//!"
},
{
"path": "aws/rust-runtime/aws-config/src/imds/mod.rs",
"chars": 400,
"preview": "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n//!"
}
]
// ... and 3158 more files (download for full content)
About this extraction
This page contains the full source code of the awslabs/smithy-rs GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3358 files (39.7 MB), approximately 10.6M tokens, and a symbol index with 11623 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.