Unverified Commit 14bd8092 authored by John DiSanti's avatar John DiSanti Committed by GitHub
Browse files

Add builder symbol/module resolution to symbol providers (#2395)

* Add builder symbol/module resolution to symbol providers

* Back out breaking changes

* Reduce codegen diff

* Fix server example clippy lints

* Associate #2396 with TODO comments

* Improve doc comment

* Revert doc hidden change
parent 76582ba0
Loading
Loading
Loading
Loading
+5 −9
Original line number Diff line number Diff line
@@ -3,14 +3,7 @@
 * SPDX-License-Identifier: Apache-2.0
 */

use std::sync::Arc;

use aws_sdk_sts::operation::AssumeRole;
use aws_sdk_sts::{Config, Credentials};
use aws_types::region::Region;

use super::repr::{self, BaseProvider};

use crate::credential_process::CredentialProcessProvider;
use crate::profile::credentials::ProfileFileError;
use crate::provider_config::ProviderConfig;
@@ -18,10 +11,13 @@ use crate::sso::{SsoConfig, SsoCredentialsProvider};
use crate::sts;
use crate::web_identity_token::{StaticConfiguration, WebIdentityTokenCredentialsProvider};
use aws_credential_types::provider::{self, error::CredentialsError, ProvideCredentials};
use aws_sdk_sts::input::AssumeRoleInput;
use aws_sdk_sts::middleware::DefaultMiddleware;
use aws_sdk_sts::{Config, Credentials};
use aws_smithy_client::erase::DynConnector;

use aws_types::region::Region;
use std::fmt::Debug;
use std::sync::Arc;

#[derive(Debug)]
pub(super) struct AssumeRoleProvider {
@@ -51,7 +47,7 @@ impl AssumeRoleProvider {
            .as_ref()
            .cloned()
            .unwrap_or_else(|| sts::util::default_session_name("assume-role-from-profile"));
        let operation = AssumeRole::builder()
        let operation = AssumeRoleInput::builder()
            .role_arn(&self.role_arn)
            .set_external_id(self.external_id.clone())
            .role_session_name(session_name)
+1 −1
Original line number Diff line number Diff line
@@ -211,7 +211,7 @@ async fn load_sso_credentials(
    let config = aws_sdk_sso::Config::builder()
        .region(sso_config.region.clone())
        .build();
    let operation = aws_sdk_sso::operation::GetRoleCredentials::builder()
    let operation = aws_sdk_sso::input::GetRoleCredentialsInput::builder()
        .role_name(&sso_config.role_name)
        .access_token(&*token.access_token)
        .account_id(&sso_config.account_id)
+4 −5
Original line number Diff line number Diff line
@@ -5,19 +5,18 @@

//! Assume credentials for a role through the AWS Security Token Service (STS).

use crate::provider_config::ProviderConfig;
use aws_credential_types::cache::CredentialsCache;
use aws_credential_types::provider::{self, error::CredentialsError, future, ProvideCredentials};
use aws_sdk_sts::error::AssumeRoleError;
use aws_sdk_sts::input::AssumeRoleInput;
use aws_sdk_sts::middleware::DefaultMiddleware;
use aws_sdk_sts::model::PolicyDescriptorType;
use aws_sdk_sts::operation::AssumeRole;
use aws_smithy_client::erase::DynConnector;
use aws_smithy_http::result::SdkError;
use aws_smithy_types::error::display::DisplayErrorContext;
use aws_types::region::Region;
use std::time::Duration;

use crate::provider_config::ProviderConfig;
use aws_smithy_types::error::display::DisplayErrorContext;
use tracing::Instrument;

/// Credentials provider that uses credentials provided by another provider to assume a role
@@ -225,7 +224,7 @@ impl AssumeRoleProviderBuilder {
            .session_name
            .unwrap_or_else(|| super::util::default_session_name("assume-role-provider"));

        let operation = AssumeRole::builder()
        let operation = AssumeRoleInput::builder()
            .set_role_arn(Some(self.role_arn))
            .set_external_id(self.external_id)
            .set_role_session_name(Some(session_name))
+1 −1
Original line number Diff line number Diff line
@@ -236,7 +236,7 @@ async fn load_credentials(
        .region(region.clone())
        .build();

    let operation = aws_sdk_sts::operation::AssumeRoleWithWebIdentity::builder()
    let operation = aws_sdk_sts::input::AssumeRoleWithWebIdentityInput::builder()
        .role_arn(role_arn)
        .role_session_name(session_name)
        .web_identity_token(token)
+29 −25
Original line number Diff line number Diff line
@@ -36,7 +36,6 @@ import software.amazon.smithy.rust.codegen.core.smithy.generators.BuilderGenerat
import software.amazon.smithy.rust.codegen.core.smithy.generators.StructureGenerator
import software.amazon.smithy.rust.codegen.core.smithy.generators.UnionGenerator
import software.amazon.smithy.rust.codegen.core.smithy.protocols.ProtocolGeneratorFactory
import software.amazon.smithy.rust.codegen.core.smithy.traits.SyntheticInputTrait
import software.amazon.smithy.rust.codegen.core.smithy.transformers.EventStreamNormalizer
import software.amazon.smithy.rust.codegen.core.smithy.transformers.OperationNormalizer
import software.amazon.smithy.rust.codegen.core.smithy.transformers.RecursiveShapeBoxer
@@ -75,6 +74,12 @@ class ClientCodegenVisitor(
                true -> ClientModuleProvider
                else -> OldModuleSchemeClientModuleProvider
            },
            nameBuilderFor = { symbol ->
                when (settings.codegenConfig.enableNewCrateOrganizationScheme) {
                    true -> "${symbol.name}Builder"
                    else -> "Builder"
                }
            },
        )
        val baseModel = baselineTransform(context.model)
        val untransformedService = settings.getService(baseModel)
@@ -85,7 +90,7 @@ class ClientCodegenVisitor(
        model = codegenDecorator.transformModel(untransformedService, baseModel)
        // the model transformer _might_ change the service shape
        val service = settings.getService(model)
        symbolProvider = RustClientCodegenPlugin.baseSymbolProvider(model, service, rustSymbolProviderConfig)
        symbolProvider = RustClientCodegenPlugin.baseSymbolProvider(settings, model, service, rustSymbolProviderConfig)

        codegenContext = ClientCodegenContext(model, symbolProvider, service, protocol, settings, codegenDecorator)

@@ -187,9 +192,9 @@ class ClientCodegenVisitor(
     * This function _does not_ generate any serializers
     */
    override fun structureShape(shape: StructureShape) {
        rustCrate.useShapeWriter(shape) {
        when (val errorTrait = shape.getTrait<ErrorTrait>()) {
            null -> {
                rustCrate.useShapeWriter(shape) {
                    StructureGenerator(
                        model,
                        symbolProvider,
@@ -198,25 +203,25 @@ class ClientCodegenVisitor(
                        codegenDecorator.structureCustomizations(codegenContext, emptyList()),
                    ).render()

                    if (!shape.hasTrait<SyntheticInputTrait>()) {
                        val builderGenerator =
                    implBlock(symbolProvider.toSymbol(shape)) {
                        BuilderGenerator.renderConvenienceMethod(this, symbolProvider, shape)
                    }
                }

                rustCrate.withModule(symbolProvider.moduleForBuilder(shape)) {
                    BuilderGenerator(
                        codegenContext.model,
                        codegenContext.symbolProvider,
                        shape,
                        codegenDecorator.builderCustomizations(codegenContext, emptyList()),
                            )
                        builderGenerator.render(this)
                        implBlock(symbolProvider.toSymbol(shape)) {
                            builderGenerator.renderConvenienceMethod(this)
                        }
                    ).render(this)
                }
            }
            else -> {
                ErrorGenerator(
                    rustCrate,
                    model,
                    symbolProvider,
                        this,
                    shape,
                    errorTrait,
                    codegenDecorator.errorImplCustomizations(codegenContext, emptyList()),
@@ -224,7 +229,6 @@ class ClientCodegenVisitor(
            }
        }
    }
    }

    /**
     * String Shape Visitor
Loading