aws-sdk-migrationhuborchestrator 0.5.0

AWS SDK for AWS Migration Hub Orchestrator
Documentation
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
#[derive(Debug)]
pub(crate) struct Handle {
    pub(crate) client: aws_smithy_client::Client<
        aws_smithy_client::erase::DynConnector,
        aws_smithy_client::erase::DynMiddleware<aws_smithy_client::erase::DynConnector>,
    >,
    pub(crate) conf: crate::Config,
}

/// Client for AWS Migration Hub Orchestrator
///
/// Client for invoking operations on AWS Migration Hub Orchestrator. Each operation on AWS Migration Hub Orchestrator is a method on this
/// this struct. `.send()` MUST be invoked on the generated operations to dispatch the request to the service.
///
/// # Examples
/// **Constructing a client and invoking an operation**
/// ```rust,no_run
/// # async fn docs() {
///     // create a shared configuration. This can be used & shared between multiple service clients.
///     let shared_config = aws_config::load_from_env().await;
///     let client = aws_sdk_migrationhuborchestrator::Client::new(&shared_config);
///     // invoke an operation
///     /* let rsp = client
///         .<operation_name>().
///         .<param>("some value")
///         .send().await; */
/// # }
/// ```
/// **Constructing a client with custom configuration**
/// ```rust,no_run
/// use aws_config::retry::RetryConfig;
/// # async fn docs() {
/// let shared_config = aws_config::load_from_env().await;
/// let config = aws_sdk_migrationhuborchestrator::config::Builder::from(&shared_config)
///   .retry_config(RetryConfig::disabled())
///   .build();
/// let client = aws_sdk_migrationhuborchestrator::Client::from_conf(config);
/// # }
#[derive(std::fmt::Debug)]
pub struct Client {
    handle: std::sync::Arc<Handle>,
}

impl std::clone::Clone for Client {
    fn clone(&self) -> Self {
        Self {
            handle: self.handle.clone(),
        }
    }
}

#[doc(inline)]
pub use aws_smithy_client::Builder;

impl
    From<
        aws_smithy_client::Client<
            aws_smithy_client::erase::DynConnector,
            aws_smithy_client::erase::DynMiddleware<aws_smithy_client::erase::DynConnector>,
        >,
    > for Client
{
    fn from(
        client: aws_smithy_client::Client<
            aws_smithy_client::erase::DynConnector,
            aws_smithy_client::erase::DynMiddleware<aws_smithy_client::erase::DynConnector>,
        >,
    ) -> Self {
        Self::with_config(client, crate::Config::builder().build())
    }
}

impl Client {
    /// Creates a client with the given service configuration.
    pub fn with_config(
        client: aws_smithy_client::Client<
            aws_smithy_client::erase::DynConnector,
            aws_smithy_client::erase::DynMiddleware<aws_smithy_client::erase::DynConnector>,
        >,
        conf: crate::Config,
    ) -> Self {
        Self {
            handle: std::sync::Arc::new(Handle { client, conf }),
        }
    }

    /// Returns the client's configuration.
    pub fn conf(&self) -> &crate::Config {
        &self.handle.conf
    }
}
impl Client {
    /// Constructs a fluent builder for the [`CreateWorkflow`](crate::client::fluent_builders::CreateWorkflow) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::CreateWorkflow::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::CreateWorkflow::set_name): <p>The name of the migration workflow.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateWorkflow::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateWorkflow::set_description): <p>The description of the migration workflow.</p>
    ///   - [`template_id(impl Into<String>)`](crate::client::fluent_builders::CreateWorkflow::template_id) / [`set_template_id(Option<String>)`](crate::client::fluent_builders::CreateWorkflow::set_template_id): <p>The ID of the template.</p>
    ///   - [`application_configuration_id(impl Into<String>)`](crate::client::fluent_builders::CreateWorkflow::application_configuration_id) / [`set_application_configuration_id(Option<String>)`](crate::client::fluent_builders::CreateWorkflow::set_application_configuration_id): <p>The configuration ID of the application configured in Application Discovery Service.</p>
    ///   - [`input_parameters(HashMap<String, StepInput>)`](crate::client::fluent_builders::CreateWorkflow::input_parameters) / [`set_input_parameters(Option<HashMap<String, StepInput>>)`](crate::client::fluent_builders::CreateWorkflow::set_input_parameters): <p>The input parameters required to create a migration workflow.</p>
    ///   - [`step_targets(Vec<String>)`](crate::client::fluent_builders::CreateWorkflow::step_targets) / [`set_step_targets(Option<Vec<String>>)`](crate::client::fluent_builders::CreateWorkflow::set_step_targets): <p>The servers on which a step will be run.</p>
    ///   - [`tags(HashMap<String, String>)`](crate::client::fluent_builders::CreateWorkflow::tags) / [`set_tags(Option<HashMap<String, String>>)`](crate::client::fluent_builders::CreateWorkflow::set_tags): <p>The tags to add on a migration workflow.</p>
    /// - On success, responds with [`CreateWorkflowOutput`](crate::output::CreateWorkflowOutput) with field(s):
    ///   - [`id(Option<String>)`](crate::output::CreateWorkflowOutput::id): <p>The ID of the migration workflow.</p>
    ///   - [`arn(Option<String>)`](crate::output::CreateWorkflowOutput::arn): <p>The Amazon Resource Name (ARN) of the migration workflow.</p>
    ///   - [`name(Option<String>)`](crate::output::CreateWorkflowOutput::name): <p>The name of the migration workflow.</p>
    ///   - [`description(Option<String>)`](crate::output::CreateWorkflowOutput::description): <p>The description of the migration workflow.</p>
    ///   - [`template_id(Option<String>)`](crate::output::CreateWorkflowOutput::template_id): <p>The ID of the template.</p>
    ///   - [`ads_application_configuration_id(Option<String>)`](crate::output::CreateWorkflowOutput::ads_application_configuration_id): <p>The configuration ID of the application configured in Application Discovery Service.</p>
    ///   - [`workflow_inputs(Option<HashMap<String, StepInput>>)`](crate::output::CreateWorkflowOutput::workflow_inputs): <p>The inputs for creating a migration workflow.</p>
    ///   - [`step_targets(Option<Vec<String>>)`](crate::output::CreateWorkflowOutput::step_targets): <p>The servers on which a step will be run.</p>
    ///   - [`status(Option<MigrationWorkflowStatusEnum>)`](crate::output::CreateWorkflowOutput::status): <p>The status of the migration workflow.</p>
    ///   - [`creation_time(Option<DateTime>)`](crate::output::CreateWorkflowOutput::creation_time): <p>The time at which the migration workflow was created.</p>
    ///   - [`tags(Option<HashMap<String, String>>)`](crate::output::CreateWorkflowOutput::tags): <p>The tags to add on a migration workflow.</p>
    /// - On failure, responds with [`SdkError<CreateWorkflowError>`](crate::error::CreateWorkflowError)
    pub fn create_workflow(&self) -> fluent_builders::CreateWorkflow {
        fluent_builders::CreateWorkflow::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateWorkflowStep`](crate::client::fluent_builders::CreateWorkflowStep) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::CreateWorkflowStep::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::CreateWorkflowStep::set_name): <p>The name of the step.</p>
    ///   - [`step_group_id(impl Into<String>)`](crate::client::fluent_builders::CreateWorkflowStep::step_group_id) / [`set_step_group_id(Option<String>)`](crate::client::fluent_builders::CreateWorkflowStep::set_step_group_id): <p>The ID of the step group.</p>
    ///   - [`workflow_id(impl Into<String>)`](crate::client::fluent_builders::CreateWorkflowStep::workflow_id) / [`set_workflow_id(Option<String>)`](crate::client::fluent_builders::CreateWorkflowStep::set_workflow_id): <p>The ID of the migration workflow.</p>
    ///   - [`step_action_type(StepActionType)`](crate::client::fluent_builders::CreateWorkflowStep::step_action_type) / [`set_step_action_type(Option<StepActionType>)`](crate::client::fluent_builders::CreateWorkflowStep::set_step_action_type): <p>The action type of the step. You must run and update the status of a manual step for the workflow to continue after the completion of the step.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateWorkflowStep::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateWorkflowStep::set_description): <p>The description of the step.</p>
    ///   - [`workflow_step_automation_configuration(WorkflowStepAutomationConfiguration)`](crate::client::fluent_builders::CreateWorkflowStep::workflow_step_automation_configuration) / [`set_workflow_step_automation_configuration(Option<WorkflowStepAutomationConfiguration>)`](crate::client::fluent_builders::CreateWorkflowStep::set_workflow_step_automation_configuration): <p>The custom script to run tests on source or target environments.</p>
    ///   - [`step_target(Vec<String>)`](crate::client::fluent_builders::CreateWorkflowStep::step_target) / [`set_step_target(Option<Vec<String>>)`](crate::client::fluent_builders::CreateWorkflowStep::set_step_target): <p>The servers on which a step will be run.</p>
    ///   - [`outputs(Vec<WorkflowStepOutput>)`](crate::client::fluent_builders::CreateWorkflowStep::outputs) / [`set_outputs(Option<Vec<WorkflowStepOutput>>)`](crate::client::fluent_builders::CreateWorkflowStep::set_outputs): <p>The key value pairs added for the expected output.</p>
    ///   - [`previous(Vec<String>)`](crate::client::fluent_builders::CreateWorkflowStep::previous) / [`set_previous(Option<Vec<String>>)`](crate::client::fluent_builders::CreateWorkflowStep::set_previous): <p>The previous step.</p>
    ///   - [`next(Vec<String>)`](crate::client::fluent_builders::CreateWorkflowStep::next) / [`set_next(Option<Vec<String>>)`](crate::client::fluent_builders::CreateWorkflowStep::set_next): <p>The next step.</p>
    /// - On success, responds with [`CreateWorkflowStepOutput`](crate::output::CreateWorkflowStepOutput) with field(s):
    ///   - [`id(Option<String>)`](crate::output::CreateWorkflowStepOutput::id): <p>The ID of the step.</p>
    ///   - [`step_group_id(Option<String>)`](crate::output::CreateWorkflowStepOutput::step_group_id): <p>The ID of the step group.</p>
    ///   - [`workflow_id(Option<String>)`](crate::output::CreateWorkflowStepOutput::workflow_id): <p>The ID of the migration workflow.</p>
    ///   - [`name(Option<String>)`](crate::output::CreateWorkflowStepOutput::name): <p>The name of the step.</p>
    /// - On failure, responds with [`SdkError<CreateWorkflowStepError>`](crate::error::CreateWorkflowStepError)
    pub fn create_workflow_step(&self) -> fluent_builders::CreateWorkflowStep {
        fluent_builders::CreateWorkflowStep::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateWorkflowStepGroup`](crate::client::fluent_builders::CreateWorkflowStepGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`workflow_id(impl Into<String>)`](crate::client::fluent_builders::CreateWorkflowStepGroup::workflow_id) / [`set_workflow_id(Option<String>)`](crate::client::fluent_builders::CreateWorkflowStepGroup::set_workflow_id): <p>The ID of the migration workflow that will contain the step group.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::CreateWorkflowStepGroup::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::CreateWorkflowStepGroup::set_name): <p>The name of the step group.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateWorkflowStepGroup::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateWorkflowStepGroup::set_description): <p>The description of the step group.</p>
    ///   - [`next(Vec<String>)`](crate::client::fluent_builders::CreateWorkflowStepGroup::next) / [`set_next(Option<Vec<String>>)`](crate::client::fluent_builders::CreateWorkflowStepGroup::set_next): <p>The next step group.</p>
    ///   - [`previous(Vec<String>)`](crate::client::fluent_builders::CreateWorkflowStepGroup::previous) / [`set_previous(Option<Vec<String>>)`](crate::client::fluent_builders::CreateWorkflowStepGroup::set_previous): <p>The previous step group.</p>
    /// - On success, responds with [`CreateWorkflowStepGroupOutput`](crate::output::CreateWorkflowStepGroupOutput) with field(s):
    ///   - [`workflow_id(Option<String>)`](crate::output::CreateWorkflowStepGroupOutput::workflow_id): <p>The ID of the migration workflow that contains the step group.</p>
    ///   - [`name(Option<String>)`](crate::output::CreateWorkflowStepGroupOutput::name): <p>The name of the step group.</p>
    ///   - [`id(Option<String>)`](crate::output::CreateWorkflowStepGroupOutput::id): <p>The ID of the step group.</p>
    ///   - [`description(Option<String>)`](crate::output::CreateWorkflowStepGroupOutput::description): <p>The description of the step group.</p>
    ///   - [`tools(Option<Vec<Tool>>)`](crate::output::CreateWorkflowStepGroupOutput::tools): <p>List of AWS services utilized in a migration workflow.</p>
    ///   - [`next(Option<Vec<String>>)`](crate::output::CreateWorkflowStepGroupOutput::next): <p>The next step group.</p>
    ///   - [`previous(Option<Vec<String>>)`](crate::output::CreateWorkflowStepGroupOutput::previous): <p>The previous step group.</p>
    ///   - [`creation_time(Option<DateTime>)`](crate::output::CreateWorkflowStepGroupOutput::creation_time): <p>The time at which the step group is created.</p>
    /// - On failure, responds with [`SdkError<CreateWorkflowStepGroupError>`](crate::error::CreateWorkflowStepGroupError)
    pub fn create_workflow_step_group(&self) -> fluent_builders::CreateWorkflowStepGroup {
        fluent_builders::CreateWorkflowStepGroup::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteWorkflow`](crate::client::fluent_builders::DeleteWorkflow) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`id(impl Into<String>)`](crate::client::fluent_builders::DeleteWorkflow::id) / [`set_id(Option<String>)`](crate::client::fluent_builders::DeleteWorkflow::set_id): <p>The ID of the migration workflow you want to delete.</p>
    /// - On success, responds with [`DeleteWorkflowOutput`](crate::output::DeleteWorkflowOutput) with field(s):
    ///   - [`id(Option<String>)`](crate::output::DeleteWorkflowOutput::id): <p>The ID of the migration workflow.</p>
    ///   - [`arn(Option<String>)`](crate::output::DeleteWorkflowOutput::arn): <p>The Amazon Resource Name (ARN) of the migration workflow.</p>
    ///   - [`status(Option<MigrationWorkflowStatusEnum>)`](crate::output::DeleteWorkflowOutput::status): <p>The status of the migration workflow.</p>
    /// - On failure, responds with [`SdkError<DeleteWorkflowError>`](crate::error::DeleteWorkflowError)
    pub fn delete_workflow(&self) -> fluent_builders::DeleteWorkflow {
        fluent_builders::DeleteWorkflow::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteWorkflowStep`](crate::client::fluent_builders::DeleteWorkflowStep) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`id(impl Into<String>)`](crate::client::fluent_builders::DeleteWorkflowStep::id) / [`set_id(Option<String>)`](crate::client::fluent_builders::DeleteWorkflowStep::set_id): <p>The ID of the step you want to delete.</p>
    ///   - [`step_group_id(impl Into<String>)`](crate::client::fluent_builders::DeleteWorkflowStep::step_group_id) / [`set_step_group_id(Option<String>)`](crate::client::fluent_builders::DeleteWorkflowStep::set_step_group_id): <p>The ID of the step group that contains the step you want to delete.</p>
    ///   - [`workflow_id(impl Into<String>)`](crate::client::fluent_builders::DeleteWorkflowStep::workflow_id) / [`set_workflow_id(Option<String>)`](crate::client::fluent_builders::DeleteWorkflowStep::set_workflow_id): <p>The ID of the migration workflow.</p>
    /// - On success, responds with [`DeleteWorkflowStepOutput`](crate::output::DeleteWorkflowStepOutput)

    /// - On failure, responds with [`SdkError<DeleteWorkflowStepError>`](crate::error::DeleteWorkflowStepError)
    pub fn delete_workflow_step(&self) -> fluent_builders::DeleteWorkflowStep {
        fluent_builders::DeleteWorkflowStep::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteWorkflowStepGroup`](crate::client::fluent_builders::DeleteWorkflowStepGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`workflow_id(impl Into<String>)`](crate::client::fluent_builders::DeleteWorkflowStepGroup::workflow_id) / [`set_workflow_id(Option<String>)`](crate::client::fluent_builders::DeleteWorkflowStepGroup::set_workflow_id): <p>The ID of the migration workflow.</p>
    ///   - [`id(impl Into<String>)`](crate::client::fluent_builders::DeleteWorkflowStepGroup::id) / [`set_id(Option<String>)`](crate::client::fluent_builders::DeleteWorkflowStepGroup::set_id): <p>The ID of the step group you want to delete.</p>
    /// - On success, responds with [`DeleteWorkflowStepGroupOutput`](crate::output::DeleteWorkflowStepGroupOutput)

    /// - On failure, responds with [`SdkError<DeleteWorkflowStepGroupError>`](crate::error::DeleteWorkflowStepGroupError)
    pub fn delete_workflow_step_group(&self) -> fluent_builders::DeleteWorkflowStepGroup {
        fluent_builders::DeleteWorkflowStepGroup::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetTemplate`](crate::client::fluent_builders::GetTemplate) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`id(impl Into<String>)`](crate::client::fluent_builders::GetTemplate::id) / [`set_id(Option<String>)`](crate::client::fluent_builders::GetTemplate::set_id): <p>The ID of the template.</p>
    /// - On success, responds with [`GetTemplateOutput`](crate::output::GetTemplateOutput) with field(s):
    ///   - [`id(Option<String>)`](crate::output::GetTemplateOutput::id): <p>The ID of the template.</p>
    ///   - [`name(Option<String>)`](crate::output::GetTemplateOutput::name): <p>The name of the template.</p>
    ///   - [`description(Option<String>)`](crate::output::GetTemplateOutput::description): <p>The time at which the template was last created.</p>
    ///   - [`inputs(Option<Vec<TemplateInput>>)`](crate::output::GetTemplateOutput::inputs): <p>The inputs provided for the creation of the migration workflow.</p>
    ///   - [`tools(Option<Vec<Tool>>)`](crate::output::GetTemplateOutput::tools): <p>List of AWS services utilized in a migration workflow.</p>
    ///   - [`status(Option<TemplateStatus>)`](crate::output::GetTemplateOutput::status): <p>The status of the template.</p>
    ///   - [`creation_time(Option<DateTime>)`](crate::output::GetTemplateOutput::creation_time): <p>The time at which the template was last created.</p>
    /// - On failure, responds with [`SdkError<GetTemplateError>`](crate::error::GetTemplateError)
    pub fn get_template(&self) -> fluent_builders::GetTemplate {
        fluent_builders::GetTemplate::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetTemplateStep`](crate::client::fluent_builders::GetTemplateStep) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`id(impl Into<String>)`](crate::client::fluent_builders::GetTemplateStep::id) / [`set_id(Option<String>)`](crate::client::fluent_builders::GetTemplateStep::set_id): <p>The ID of the step.</p>
    ///   - [`template_id(impl Into<String>)`](crate::client::fluent_builders::GetTemplateStep::template_id) / [`set_template_id(Option<String>)`](crate::client::fluent_builders::GetTemplateStep::set_template_id): <p>The ID of the template.</p>
    ///   - [`step_group_id(impl Into<String>)`](crate::client::fluent_builders::GetTemplateStep::step_group_id) / [`set_step_group_id(Option<String>)`](crate::client::fluent_builders::GetTemplateStep::set_step_group_id): <p>The ID of the step group.</p>
    /// - On success, responds with [`GetTemplateStepOutput`](crate::output::GetTemplateStepOutput) with field(s):
    ///   - [`id(Option<String>)`](crate::output::GetTemplateStepOutput::id): <p>The ID of the step.</p>
    ///   - [`step_group_id(Option<String>)`](crate::output::GetTemplateStepOutput::step_group_id): <p>The ID of the step group.</p>
    ///   - [`template_id(Option<String>)`](crate::output::GetTemplateStepOutput::template_id): <p>The ID of the template.</p>
    ///   - [`name(Option<String>)`](crate::output::GetTemplateStepOutput::name): <p>The name of the step.</p>
    ///   - [`description(Option<String>)`](crate::output::GetTemplateStepOutput::description): <p>The description of the step.</p>
    ///   - [`step_action_type(Option<StepActionType>)`](crate::output::GetTemplateStepOutput::step_action_type): <p>The action type of the step. You must run and update the status of a manual step for the workflow to continue after the completion of the step.</p>
    ///   - [`creation_time(Option<String>)`](crate::output::GetTemplateStepOutput::creation_time): <p>The time at which the step was created.</p>
    ///   - [`previous(Option<Vec<String>>)`](crate::output::GetTemplateStepOutput::previous): <p>The previous step.</p>
    ///   - [`next(Option<Vec<String>>)`](crate::output::GetTemplateStepOutput::next): <p>The next step.</p>
    ///   - [`outputs(Option<Vec<StepOutput>>)`](crate::output::GetTemplateStepOutput::outputs): <p>The outputs of the step.</p>
    ///   - [`step_automation_configuration(Option<StepAutomationConfiguration>)`](crate::output::GetTemplateStepOutput::step_automation_configuration): <p>The custom script to run tests on source or target environments.</p>
    /// - On failure, responds with [`SdkError<GetTemplateStepError>`](crate::error::GetTemplateStepError)
    pub fn get_template_step(&self) -> fluent_builders::GetTemplateStep {
        fluent_builders::GetTemplateStep::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetTemplateStepGroup`](crate::client::fluent_builders::GetTemplateStepGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`template_id(impl Into<String>)`](crate::client::fluent_builders::GetTemplateStepGroup::template_id) / [`set_template_id(Option<String>)`](crate::client::fluent_builders::GetTemplateStepGroup::set_template_id): <p>The ID of the template.</p>
    ///   - [`id(impl Into<String>)`](crate::client::fluent_builders::GetTemplateStepGroup::id) / [`set_id(Option<String>)`](crate::client::fluent_builders::GetTemplateStepGroup::set_id): <p>The ID of the step group.</p>
    /// - On success, responds with [`GetTemplateStepGroupOutput`](crate::output::GetTemplateStepGroupOutput) with field(s):
    ///   - [`template_id(Option<String>)`](crate::output::GetTemplateStepGroupOutput::template_id): <p>The ID of the template.</p>
    ///   - [`id(Option<String>)`](crate::output::GetTemplateStepGroupOutput::id): <p>The ID of the step group.</p>
    ///   - [`name(Option<String>)`](crate::output::GetTemplateStepGroupOutput::name): <p>The name of the step group.</p>
    ///   - [`description(Option<String>)`](crate::output::GetTemplateStepGroupOutput::description): <p>The description of the step group.</p>
    ///   - [`status(Option<StepGroupStatus>)`](crate::output::GetTemplateStepGroupOutput::status): <p>The status of the step group.</p>
    ///   - [`creation_time(Option<DateTime>)`](crate::output::GetTemplateStepGroupOutput::creation_time): <p>The time at which the step group was created.</p>
    ///   - [`last_modified_time(Option<DateTime>)`](crate::output::GetTemplateStepGroupOutput::last_modified_time): <p>The time at which the step group was last modified.</p>
    ///   - [`tools(Option<Vec<Tool>>)`](crate::output::GetTemplateStepGroupOutput::tools): <p>List of AWS services utilized in a migration workflow.</p>
    ///   - [`previous(Option<Vec<String>>)`](crate::output::GetTemplateStepGroupOutput::previous): <p>The previous step group.</p>
    ///   - [`next(Option<Vec<String>>)`](crate::output::GetTemplateStepGroupOutput::next): <p>The next step group.</p>
    /// - On failure, responds with [`SdkError<GetTemplateStepGroupError>`](crate::error::GetTemplateStepGroupError)
    pub fn get_template_step_group(&self) -> fluent_builders::GetTemplateStepGroup {
        fluent_builders::GetTemplateStepGroup::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetWorkflow`](crate::client::fluent_builders::GetWorkflow) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`id(impl Into<String>)`](crate::client::fluent_builders::GetWorkflow::id) / [`set_id(Option<String>)`](crate::client::fluent_builders::GetWorkflow::set_id): <p>The ID of the migration workflow.</p>
    /// - On success, responds with [`GetWorkflowOutput`](crate::output::GetWorkflowOutput) with field(s):
    ///   - [`id(Option<String>)`](crate::output::GetWorkflowOutput::id): <p>The ID of the migration workflow.</p>
    ///   - [`arn(Option<String>)`](crate::output::GetWorkflowOutput::arn): <p>The Amazon Resource Name (ARN) of the migration workflow.</p>
    ///   - [`name(Option<String>)`](crate::output::GetWorkflowOutput::name): <p>The name of the migration workflow.</p>
    ///   - [`description(Option<String>)`](crate::output::GetWorkflowOutput::description): <p>The description of the migration workflow.</p>
    ///   - [`template_id(Option<String>)`](crate::output::GetWorkflowOutput::template_id): <p>The ID of the template.</p>
    ///   - [`ads_application_configuration_id(Option<String>)`](crate::output::GetWorkflowOutput::ads_application_configuration_id): <p>The configuration ID of the application configured in Application Discovery Service.</p>
    ///   - [`ads_application_name(Option<String>)`](crate::output::GetWorkflowOutput::ads_application_name): <p>The name of the application configured in Application Discovery Service.</p>
    ///   - [`status(Option<MigrationWorkflowStatusEnum>)`](crate::output::GetWorkflowOutput::status): <p>The status of the migration workflow.</p>
    ///   - [`status_message(Option<String>)`](crate::output::GetWorkflowOutput::status_message): <p>The status message of the migration workflow.</p>
    ///   - [`creation_time(Option<DateTime>)`](crate::output::GetWorkflowOutput::creation_time): <p>The time at which the migration workflow was created.</p>
    ///   - [`last_start_time(Option<DateTime>)`](crate::output::GetWorkflowOutput::last_start_time): <p>The time at which the migration workflow was last started.</p>
    ///   - [`last_stop_time(Option<DateTime>)`](crate::output::GetWorkflowOutput::last_stop_time): <p>The time at which the migration workflow was last stopped.</p>
    ///   - [`last_modified_time(Option<DateTime>)`](crate::output::GetWorkflowOutput::last_modified_time): <p>The time at which the migration workflow was last modified.</p>
    ///   - [`end_time(Option<DateTime>)`](crate::output::GetWorkflowOutput::end_time): <p>The time at which the migration workflow ended.</p>
    ///   - [`tools(Option<Vec<Tool>>)`](crate::output::GetWorkflowOutput::tools): <p>List of AWS services utilized in a migration workflow.</p>
    ///   - [`total_steps(Option<i32>)`](crate::output::GetWorkflowOutput::total_steps): <p>The total number of steps in the migration workflow.</p>
    ///   - [`completed_steps(Option<i32>)`](crate::output::GetWorkflowOutput::completed_steps): <p>Get a list of completed steps in the migration workflow.</p>
    ///   - [`workflow_inputs(Option<HashMap<String, StepInput>>)`](crate::output::GetWorkflowOutput::workflow_inputs): <p>The inputs required for creating the migration workflow.</p>
    ///   - [`tags(Option<HashMap<String, String>>)`](crate::output::GetWorkflowOutput::tags): <p>The tags added to the migration workflow.</p>
    ///   - [`workflow_bucket(Option<String>)`](crate::output::GetWorkflowOutput::workflow_bucket): <p>The Amazon S3 bucket where the migration logs are stored.</p>
    /// - On failure, responds with [`SdkError<GetWorkflowError>`](crate::error::GetWorkflowError)
    pub fn get_workflow(&self) -> fluent_builders::GetWorkflow {
        fluent_builders::GetWorkflow::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetWorkflowStep`](crate::client::fluent_builders::GetWorkflowStep) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`workflow_id(impl Into<String>)`](crate::client::fluent_builders::GetWorkflowStep::workflow_id) / [`set_workflow_id(Option<String>)`](crate::client::fluent_builders::GetWorkflowStep::set_workflow_id): <p>The ID of the migration workflow.</p>
    ///   - [`step_group_id(impl Into<String>)`](crate::client::fluent_builders::GetWorkflowStep::step_group_id) / [`set_step_group_id(Option<String>)`](crate::client::fluent_builders::GetWorkflowStep::set_step_group_id): <p>desThe ID of the step group.</p>
    ///   - [`id(impl Into<String>)`](crate::client::fluent_builders::GetWorkflowStep::id) / [`set_id(Option<String>)`](crate::client::fluent_builders::GetWorkflowStep::set_id): <p>The ID of the step.</p>
    /// - On success, responds with [`GetWorkflowStepOutput`](crate::output::GetWorkflowStepOutput) with field(s):
    ///   - [`name(Option<String>)`](crate::output::GetWorkflowStepOutput::name): <p>The name of the step.</p>
    ///   - [`step_group_id(Option<String>)`](crate::output::GetWorkflowStepOutput::step_group_id): <p>The ID of the step group.</p>
    ///   - [`workflow_id(Option<String>)`](crate::output::GetWorkflowStepOutput::workflow_id): <p>The ID of the migration workflow.</p>
    ///   - [`step_id(Option<String>)`](crate::output::GetWorkflowStepOutput::step_id): <p>The ID of the step.</p>
    ///   - [`description(Option<String>)`](crate::output::GetWorkflowStepOutput::description): <p>The description of the step.</p>
    ///   - [`step_action_type(Option<StepActionType>)`](crate::output::GetWorkflowStepOutput::step_action_type): <p>The action type of the step. You must run and update the status of a manual step for the workflow to continue after the completion of the step.</p>
    ///   - [`owner(Option<Owner>)`](crate::output::GetWorkflowStepOutput::owner): <p>The owner of the step.</p>
    ///   - [`workflow_step_automation_configuration(Option<WorkflowStepAutomationConfiguration>)`](crate::output::GetWorkflowStepOutput::workflow_step_automation_configuration): <p>The custom script to run tests on source or target environments.</p>
    ///   - [`step_target(Option<Vec<String>>)`](crate::output::GetWorkflowStepOutput::step_target): <p>The servers on which a step will be run.</p>
    ///   - [`outputs(Option<Vec<WorkflowStepOutput>>)`](crate::output::GetWorkflowStepOutput::outputs): <p>The outputs of the step.</p>
    ///   - [`previous(Option<Vec<String>>)`](crate::output::GetWorkflowStepOutput::previous): <p>The previous step.</p>
    ///   - [`next(Option<Vec<String>>)`](crate::output::GetWorkflowStepOutput::next): <p>The next step.</p>
    ///   - [`status(Option<StepStatus>)`](crate::output::GetWorkflowStepOutput::status): <p>The status of the step.</p>
    ///   - [`status_message(Option<String>)`](crate::output::GetWorkflowStepOutput::status_message): <p>The status message of the migration workflow.</p>
    ///   - [`script_output_location(Option<String>)`](crate::output::GetWorkflowStepOutput::script_output_location): <p>The output location of the script.</p>
    ///   - [`creation_time(Option<DateTime>)`](crate::output::GetWorkflowStepOutput::creation_time): <p>The time at which the step was created.</p>
    ///   - [`last_start_time(Option<DateTime>)`](crate::output::GetWorkflowStepOutput::last_start_time): <p>The time at which the workflow was last started.</p>
    ///   - [`end_time(Option<DateTime>)`](crate::output::GetWorkflowStepOutput::end_time): <p>The time at which the step ended.</p>
    ///   - [`no_of_srv_completed(Option<i32>)`](crate::output::GetWorkflowStepOutput::no_of_srv_completed): <p>The number of servers that have been migrated.</p>
    ///   - [`no_of_srv_failed(Option<i32>)`](crate::output::GetWorkflowStepOutput::no_of_srv_failed): <p>The number of servers that have failed to migrate.</p>
    ///   - [`total_no_of_srv(Option<i32>)`](crate::output::GetWorkflowStepOutput::total_no_of_srv): <p>The total number of servers that have been migrated.</p>
    /// - On failure, responds with [`SdkError<GetWorkflowStepError>`](crate::error::GetWorkflowStepError)
    pub fn get_workflow_step(&self) -> fluent_builders::GetWorkflowStep {
        fluent_builders::GetWorkflowStep::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetWorkflowStepGroup`](crate::client::fluent_builders::GetWorkflowStepGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`id(impl Into<String>)`](crate::client::fluent_builders::GetWorkflowStepGroup::id) / [`set_id(Option<String>)`](crate::client::fluent_builders::GetWorkflowStepGroup::set_id): <p>The ID of the step group.</p>
    ///   - [`workflow_id(impl Into<String>)`](crate::client::fluent_builders::GetWorkflowStepGroup::workflow_id) / [`set_workflow_id(Option<String>)`](crate::client::fluent_builders::GetWorkflowStepGroup::set_workflow_id): <p>The ID of the migration workflow.</p>
    /// - On success, responds with [`GetWorkflowStepGroupOutput`](crate::output::GetWorkflowStepGroupOutput) with field(s):
    ///   - [`id(Option<String>)`](crate::output::GetWorkflowStepGroupOutput::id): <p>The ID of the step group.</p>
    ///   - [`workflow_id(Option<String>)`](crate::output::GetWorkflowStepGroupOutput::workflow_id): <p>The ID of the migration workflow.</p>
    ///   - [`name(Option<String>)`](crate::output::GetWorkflowStepGroupOutput::name): <p>The name of the step group.</p>
    ///   - [`description(Option<String>)`](crate::output::GetWorkflowStepGroupOutput::description): <p>The description of the step group.</p>
    ///   - [`status(Option<StepGroupStatus>)`](crate::output::GetWorkflowStepGroupOutput::status): <p>The status of the step group.</p>
    ///   - [`owner(Option<Owner>)`](crate::output::GetWorkflowStepGroupOutput::owner): <p>The owner of the step group.</p>
    ///   - [`creation_time(Option<DateTime>)`](crate::output::GetWorkflowStepGroupOutput::creation_time): <p>The time at which the step group was created.</p>
    ///   - [`last_modified_time(Option<DateTime>)`](crate::output::GetWorkflowStepGroupOutput::last_modified_time): <p>The time at which the step group was last modified.</p>
    ///   - [`end_time(Option<DateTime>)`](crate::output::GetWorkflowStepGroupOutput::end_time): <p>The time at which the step group ended.</p>
    ///   - [`tools(Option<Vec<Tool>>)`](crate::output::GetWorkflowStepGroupOutput::tools): <p>List of AWS services utilized in a migration workflow.</p>
    ///   - [`previous(Option<Vec<String>>)`](crate::output::GetWorkflowStepGroupOutput::previous): <p>The previous step group.</p>
    ///   - [`next(Option<Vec<String>>)`](crate::output::GetWorkflowStepGroupOutput::next): <p>The next step group.</p>
    /// - On failure, responds with [`SdkError<GetWorkflowStepGroupError>`](crate::error::GetWorkflowStepGroupError)
    pub fn get_workflow_step_group(&self) -> fluent_builders::GetWorkflowStepGroup {
        fluent_builders::GetWorkflowStepGroup::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListPlugins`](crate::client::fluent_builders::ListPlugins) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListPlugins::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListPlugins::max_results) / [`set_max_results(i32)`](crate::client::fluent_builders::ListPlugins::set_max_results): <p>The maximum number of plugins that can be returned.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListPlugins::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListPlugins::set_next_token): <p>The pagination token.</p>
    /// - On success, responds with [`ListPluginsOutput`](crate::output::ListPluginsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::ListPluginsOutput::next_token): <p>The pagination token.</p>
    ///   - [`plugins(Option<Vec<PluginSummary>>)`](crate::output::ListPluginsOutput::plugins): <p>Migration Hub Orchestrator plugins.</p>
    /// - On failure, responds with [`SdkError<ListPluginsError>`](crate::error::ListPluginsError)
    pub fn list_plugins(&self) -> fluent_builders::ListPlugins {
        fluent_builders::ListPlugins::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListTagsForResource`](crate::client::fluent_builders::ListTagsForResource) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`resource_arn(impl Into<String>)`](crate::client::fluent_builders::ListTagsForResource::resource_arn) / [`set_resource_arn(Option<String>)`](crate::client::fluent_builders::ListTagsForResource::set_resource_arn): <p>The Amazon Resource Name (ARN) of the resource.</p>
    /// - On success, responds with [`ListTagsForResourceOutput`](crate::output::ListTagsForResourceOutput) with field(s):
    ///   - [`tags(Option<HashMap<String, String>>)`](crate::output::ListTagsForResourceOutput::tags): <p>The tags added to a resource.</p>
    /// - On failure, responds with [`SdkError<ListTagsForResourceError>`](crate::error::ListTagsForResourceError)
    pub fn list_tags_for_resource(&self) -> fluent_builders::ListTagsForResource {
        fluent_builders::ListTagsForResource::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListTemplates`](crate::client::fluent_builders::ListTemplates) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListTemplates::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListTemplates::max_results) / [`set_max_results(i32)`](crate::client::fluent_builders::ListTemplates::set_max_results): <p>The maximum number of results that can be returned.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListTemplates::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListTemplates::set_next_token): <p>The pagination token.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::ListTemplates::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::ListTemplates::set_name): <p>The name of the template.</p>
    /// - On success, responds with [`ListTemplatesOutput`](crate::output::ListTemplatesOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::ListTemplatesOutput::next_token): <p>The pagination token.</p>
    ///   - [`template_summary(Option<Vec<TemplateSummary>>)`](crate::output::ListTemplatesOutput::template_summary): <p>The summary of the template.</p>
    /// - On failure, responds with [`SdkError<ListTemplatesError>`](crate::error::ListTemplatesError)
    pub fn list_templates(&self) -> fluent_builders::ListTemplates {
        fluent_builders::ListTemplates::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListTemplateStepGroups`](crate::client::fluent_builders::ListTemplateStepGroups) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListTemplateStepGroups::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListTemplateStepGroups::max_results) / [`set_max_results(i32)`](crate::client::fluent_builders::ListTemplateStepGroups::set_max_results): <p>The maximum number of results that can be returned.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListTemplateStepGroups::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListTemplateStepGroups::set_next_token): <p>The pagination token.</p>
    ///   - [`template_id(impl Into<String>)`](crate::client::fluent_builders::ListTemplateStepGroups::template_id) / [`set_template_id(Option<String>)`](crate::client::fluent_builders::ListTemplateStepGroups::set_template_id): <p>The ID of the template.</p>
    /// - On success, responds with [`ListTemplateStepGroupsOutput`](crate::output::ListTemplateStepGroupsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::ListTemplateStepGroupsOutput::next_token): <p>The pagination token.</p>
    ///   - [`template_step_group_summary(Option<Vec<TemplateStepGroupSummary>>)`](crate::output::ListTemplateStepGroupsOutput::template_step_group_summary): <p>The summary of the step group in the template.</p>
    /// - On failure, responds with [`SdkError<ListTemplateStepGroupsError>`](crate::error::ListTemplateStepGroupsError)
    pub fn list_template_step_groups(&self) -> fluent_builders::ListTemplateStepGroups {
        fluent_builders::ListTemplateStepGroups::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListTemplateSteps`](crate::client::fluent_builders::ListTemplateSteps) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListTemplateSteps::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListTemplateSteps::max_results) / [`set_max_results(i32)`](crate::client::fluent_builders::ListTemplateSteps::set_max_results): <p>The maximum number of results that can be returned.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListTemplateSteps::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListTemplateSteps::set_next_token): <p>The pagination token.</p>
    ///   - [`template_id(impl Into<String>)`](crate::client::fluent_builders::ListTemplateSteps::template_id) / [`set_template_id(Option<String>)`](crate::client::fluent_builders::ListTemplateSteps::set_template_id): <p>The ID of the template.</p>
    ///   - [`step_group_id(impl Into<String>)`](crate::client::fluent_builders::ListTemplateSteps::step_group_id) / [`set_step_group_id(Option<String>)`](crate::client::fluent_builders::ListTemplateSteps::set_step_group_id): <p>The ID of the step group.</p>
    /// - On success, responds with [`ListTemplateStepsOutput`](crate::output::ListTemplateStepsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::ListTemplateStepsOutput::next_token): <p>The pagination token.</p>
    ///   - [`template_step_summary_list(Option<Vec<TemplateStepSummary>>)`](crate::output::ListTemplateStepsOutput::template_step_summary_list): <p>The list of summaries of steps in a template.</p>
    /// - On failure, responds with [`SdkError<ListTemplateStepsError>`](crate::error::ListTemplateStepsError)
    pub fn list_template_steps(&self) -> fluent_builders::ListTemplateSteps {
        fluent_builders::ListTemplateSteps::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListWorkflows`](crate::client::fluent_builders::ListWorkflows) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListWorkflows::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListWorkflows::max_results) / [`set_max_results(i32)`](crate::client::fluent_builders::ListWorkflows::set_max_results): <p>The maximum number of results that can be returned.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListWorkflows::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListWorkflows::set_next_token): <p>The pagination token.</p>
    ///   - [`template_id(impl Into<String>)`](crate::client::fluent_builders::ListWorkflows::template_id) / [`set_template_id(Option<String>)`](crate::client::fluent_builders::ListWorkflows::set_template_id): <p>The ID of the template.</p>
    ///   - [`ads_application_configuration_name(impl Into<String>)`](crate::client::fluent_builders::ListWorkflows::ads_application_configuration_name) / [`set_ads_application_configuration_name(Option<String>)`](crate::client::fluent_builders::ListWorkflows::set_ads_application_configuration_name): <p>The name of the application configured in Application Discovery Service.</p>
    ///   - [`status(MigrationWorkflowStatusEnum)`](crate::client::fluent_builders::ListWorkflows::status) / [`set_status(Option<MigrationWorkflowStatusEnum>)`](crate::client::fluent_builders::ListWorkflows::set_status): <p>The status of the migration workflow.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::ListWorkflows::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::ListWorkflows::set_name): <p>The name of the migration workflow.</p>
    /// - On success, responds with [`ListWorkflowsOutput`](crate::output::ListWorkflowsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::ListWorkflowsOutput::next_token): <p>The pagination token.</p>
    ///   - [`migration_workflow_summary(Option<Vec<MigrationWorkflowSummary>>)`](crate::output::ListWorkflowsOutput::migration_workflow_summary): <p>The summary of the migration workflow.</p>
    /// - On failure, responds with [`SdkError<ListWorkflowsError>`](crate::error::ListWorkflowsError)
    pub fn list_workflows(&self) -> fluent_builders::ListWorkflows {
        fluent_builders::ListWorkflows::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListWorkflowStepGroups`](crate::client::fluent_builders::ListWorkflowStepGroups) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListWorkflowStepGroups::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListWorkflowStepGroups::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListWorkflowStepGroups::set_next_token): <p>The pagination token.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListWorkflowStepGroups::max_results) / [`set_max_results(i32)`](crate::client::fluent_builders::ListWorkflowStepGroups::set_max_results): <p>The maximum number of results that can be returned.</p>
    ///   - [`workflow_id(impl Into<String>)`](crate::client::fluent_builders::ListWorkflowStepGroups::workflow_id) / [`set_workflow_id(Option<String>)`](crate::client::fluent_builders::ListWorkflowStepGroups::set_workflow_id): <p>The ID of the migration workflow.</p>
    /// - On success, responds with [`ListWorkflowStepGroupsOutput`](crate::output::ListWorkflowStepGroupsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::ListWorkflowStepGroupsOutput::next_token): <p>The pagination token.</p>
    ///   - [`workflow_step_groups_summary(Option<Vec<WorkflowStepGroupSummary>>)`](crate::output::ListWorkflowStepGroupsOutput::workflow_step_groups_summary): <p>The summary of step groups in a migration workflow.</p>
    /// - On failure, responds with [`SdkError<ListWorkflowStepGroupsError>`](crate::error::ListWorkflowStepGroupsError)
    pub fn list_workflow_step_groups(&self) -> fluent_builders::ListWorkflowStepGroups {
        fluent_builders::ListWorkflowStepGroups::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListWorkflowSteps`](crate::client::fluent_builders::ListWorkflowSteps) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListWorkflowSteps::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListWorkflowSteps::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListWorkflowSteps::set_next_token): <p>The pagination token.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListWorkflowSteps::max_results) / [`set_max_results(i32)`](crate::client::fluent_builders::ListWorkflowSteps::set_max_results): <p>The maximum number of results that can be returned.</p>
    ///   - [`workflow_id(impl Into<String>)`](crate::client::fluent_builders::ListWorkflowSteps::workflow_id) / [`set_workflow_id(Option<String>)`](crate::client::fluent_builders::ListWorkflowSteps::set_workflow_id): <p>The ID of the migration workflow.</p>
    ///   - [`step_group_id(impl Into<String>)`](crate::client::fluent_builders::ListWorkflowSteps::step_group_id) / [`set_step_group_id(Option<String>)`](crate::client::fluent_builders::ListWorkflowSteps::set_step_group_id): <p>The ID of the step group.</p>
    /// - On success, responds with [`ListWorkflowStepsOutput`](crate::output::ListWorkflowStepsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::ListWorkflowStepsOutput::next_token): <p>The pagination token.</p>
    ///   - [`workflow_steps_summary(Option<Vec<WorkflowStepSummary>>)`](crate::output::ListWorkflowStepsOutput::workflow_steps_summary): <p>The summary of steps in a migration workflow.</p>
    /// - On failure, responds with [`SdkError<ListWorkflowStepsError>`](crate::error::ListWorkflowStepsError)
    pub fn list_workflow_steps(&self) -> fluent_builders::ListWorkflowSteps {
        fluent_builders::ListWorkflowSteps::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RetryWorkflowStep`](crate::client::fluent_builders::RetryWorkflowStep) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`workflow_id(impl Into<String>)`](crate::client::fluent_builders::RetryWorkflowStep::workflow_id) / [`set_workflow_id(Option<String>)`](crate::client::fluent_builders::RetryWorkflowStep::set_workflow_id): <p>The ID of the migration workflow.</p>
    ///   - [`step_group_id(impl Into<String>)`](crate::client::fluent_builders::RetryWorkflowStep::step_group_id) / [`set_step_group_id(Option<String>)`](crate::client::fluent_builders::RetryWorkflowStep::set_step_group_id): <p>The ID of the step group.</p>
    ///   - [`id(impl Into<String>)`](crate::client::fluent_builders::RetryWorkflowStep::id) / [`set_id(Option<String>)`](crate::client::fluent_builders::RetryWorkflowStep::set_id): <p>The ID of the step.</p>
    /// - On success, responds with [`RetryWorkflowStepOutput`](crate::output::RetryWorkflowStepOutput) with field(s):
    ///   - [`step_group_id(Option<String>)`](crate::output::RetryWorkflowStepOutput::step_group_id): <p>The ID of the step group.</p>
    ///   - [`workflow_id(Option<String>)`](crate::output::RetryWorkflowStepOutput::workflow_id): <p>The ID of the migration workflow.</p>
    ///   - [`id(Option<String>)`](crate::output::RetryWorkflowStepOutput::id): <p>The ID of the step.</p>
    ///   - [`status(Option<StepStatus>)`](crate::output::RetryWorkflowStepOutput::status): <p>The status of the step.</p>
    /// - On failure, responds with [`SdkError<RetryWorkflowStepError>`](crate::error::RetryWorkflowStepError)
    pub fn retry_workflow_step(&self) -> fluent_builders::RetryWorkflowStep {
        fluent_builders::RetryWorkflowStep::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`StartWorkflow`](crate::client::fluent_builders::StartWorkflow) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`id(impl Into<String>)`](crate::client::fluent_builders::StartWorkflow::id) / [`set_id(Option<String>)`](crate::client::fluent_builders::StartWorkflow::set_id): <p>The ID of the migration workflow.</p>
    /// - On success, responds with [`StartWorkflowOutput`](crate::output::StartWorkflowOutput) with field(s):
    ///   - [`id(Option<String>)`](crate::output::StartWorkflowOutput::id): <p>The ID of the migration workflow.</p>
    ///   - [`arn(Option<String>)`](crate::output::StartWorkflowOutput::arn): <p>The Amazon Resource Name (ARN) of the migration workflow.</p>
    ///   - [`status(Option<MigrationWorkflowStatusEnum>)`](crate::output::StartWorkflowOutput::status): <p>The status of the migration workflow.</p>
    ///   - [`status_message(Option<String>)`](crate::output::StartWorkflowOutput::status_message): <p>The status message of the migration workflow.</p>
    ///   - [`last_start_time(Option<DateTime>)`](crate::output::StartWorkflowOutput::last_start_time): <p>The time at which the migration workflow was last started.</p>
    /// - On failure, responds with [`SdkError<StartWorkflowError>`](crate::error::StartWorkflowError)
    pub fn start_workflow(&self) -> fluent_builders::StartWorkflow {
        fluent_builders::StartWorkflow::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`StopWorkflow`](crate::client::fluent_builders::StopWorkflow) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`id(impl Into<String>)`](crate::client::fluent_builders::StopWorkflow::id) / [`set_id(Option<String>)`](crate::client::fluent_builders::StopWorkflow::set_id): <p>The ID of the migration workflow.</p>
    /// - On success, responds with [`StopWorkflowOutput`](crate::output::StopWorkflowOutput) with field(s):
    ///   - [`id(Option<String>)`](crate::output::StopWorkflowOutput::id): <p>The ID of the migration workflow.</p>
    ///   - [`arn(Option<String>)`](crate::output::StopWorkflowOutput::arn): <p>The Amazon Resource Name (ARN) of the migration workflow.</p>
    ///   - [`status(Option<MigrationWorkflowStatusEnum>)`](crate::output::StopWorkflowOutput::status): <p>The status of the migration workflow.</p>
    ///   - [`status_message(Option<String>)`](crate::output::StopWorkflowOutput::status_message): <p>The status message of the migration workflow.</p>
    ///   - [`last_stop_time(Option<DateTime>)`](crate::output::StopWorkflowOutput::last_stop_time): <p>The time at which the migration workflow was stopped.</p>
    /// - On failure, responds with [`SdkError<StopWorkflowError>`](crate::error::StopWorkflowError)
    pub fn stop_workflow(&self) -> fluent_builders::StopWorkflow {
        fluent_builders::StopWorkflow::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`TagResource`](crate::client::fluent_builders::TagResource) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`resource_arn(impl Into<String>)`](crate::client::fluent_builders::TagResource::resource_arn) / [`set_resource_arn(Option<String>)`](crate::client::fluent_builders::TagResource::set_resource_arn): <p>The Amazon Resource Name (ARN) of the resource to which you want to add tags.</p>
    ///   - [`tags(HashMap<String, String>)`](crate::client::fluent_builders::TagResource::tags) / [`set_tags(Option<HashMap<String, String>>)`](crate::client::fluent_builders::TagResource::set_tags): <p>A collection of labels, in the form of key:value pairs, that apply to this resource.</p>
    /// - On success, responds with [`TagResourceOutput`](crate::output::TagResourceOutput)

    /// - On failure, responds with [`SdkError<TagResourceError>`](crate::error::TagResourceError)
    pub fn tag_resource(&self) -> fluent_builders::TagResource {
        fluent_builders::TagResource::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`UntagResource`](crate::client::fluent_builders::UntagResource) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`resource_arn(impl Into<String>)`](crate::client::fluent_builders::UntagResource::resource_arn) / [`set_resource_arn(Option<String>)`](crate::client::fluent_builders::UntagResource::set_resource_arn): <p>The Amazon Resource Name (ARN) of the resource from which you want to remove tags.</p>
    ///   - [`tag_keys(Vec<String>)`](crate::client::fluent_builders::UntagResource::tag_keys) / [`set_tag_keys(Option<Vec<String>>)`](crate::client::fluent_builders::UntagResource::set_tag_keys): <p>One or more tag keys. Specify only the tag keys, not the tag values.</p>
    /// - On success, responds with [`UntagResourceOutput`](crate::output::UntagResourceOutput)

    /// - On failure, responds with [`SdkError<UntagResourceError>`](crate::error::UntagResourceError)
    pub fn untag_resource(&self) -> fluent_builders::UntagResource {
        fluent_builders::UntagResource::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`UpdateWorkflow`](crate::client::fluent_builders::UpdateWorkflow) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`id(impl Into<String>)`](crate::client::fluent_builders::UpdateWorkflow::id) / [`set_id(Option<String>)`](crate::client::fluent_builders::UpdateWorkflow::set_id): <p>The ID of the migration workflow.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::UpdateWorkflow::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::UpdateWorkflow::set_name): <p>The name of the migration workflow.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::UpdateWorkflow::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::UpdateWorkflow::set_description): <p>The description of the migration workflow.</p>
    ///   - [`input_parameters(HashMap<String, StepInput>)`](crate::client::fluent_builders::UpdateWorkflow::input_parameters) / [`set_input_parameters(Option<HashMap<String, StepInput>>)`](crate::client::fluent_builders::UpdateWorkflow::set_input_parameters): <p>The input parameters required to update a migration workflow.</p>
    ///   - [`step_targets(Vec<String>)`](crate::client::fluent_builders::UpdateWorkflow::step_targets) / [`set_step_targets(Option<Vec<String>>)`](crate::client::fluent_builders::UpdateWorkflow::set_step_targets): <p>The servers on which a step will be run.</p>
    /// - On success, responds with [`UpdateWorkflowOutput`](crate::output::UpdateWorkflowOutput) with field(s):
    ///   - [`id(Option<String>)`](crate::output::UpdateWorkflowOutput::id): <p>The ID of the migration workflow.</p>
    ///   - [`arn(Option<String>)`](crate::output::UpdateWorkflowOutput::arn): <p>The Amazon Resource Name (ARN) of the migration workflow.</p>
    ///   - [`name(Option<String>)`](crate::output::UpdateWorkflowOutput::name): <p>The name of the migration workflow.</p>
    ///   - [`description(Option<String>)`](crate::output::UpdateWorkflowOutput::description): <p>The description of the migration workflow.</p>
    ///   - [`template_id(Option<String>)`](crate::output::UpdateWorkflowOutput::template_id): <p>The ID of the template.</p>
    ///   - [`ads_application_configuration_id(Option<String>)`](crate::output::UpdateWorkflowOutput::ads_application_configuration_id): <p>The ID of the application configured in Application Discovery Service.</p>
    ///   - [`workflow_inputs(Option<HashMap<String, StepInput>>)`](crate::output::UpdateWorkflowOutput::workflow_inputs): <p>The inputs required to update a migration workflow.</p>
    ///   - [`step_targets(Option<Vec<String>>)`](crate::output::UpdateWorkflowOutput::step_targets): <p>The servers on which a step will be run.</p>
    ///   - [`status(Option<MigrationWorkflowStatusEnum>)`](crate::output::UpdateWorkflowOutput::status): <p>The status of the migration workflow.</p>
    ///   - [`creation_time(Option<DateTime>)`](crate::output::UpdateWorkflowOutput::creation_time): <p>The time at which the migration workflow was created.</p>
    ///   - [`last_modified_time(Option<DateTime>)`](crate::output::UpdateWorkflowOutput::last_modified_time): <p>The time at which the migration workflow was last modified.</p>
    ///   - [`tags(Option<HashMap<String, String>>)`](crate::output::UpdateWorkflowOutput::tags): <p>The tags added to the migration workflow.</p>
    /// - On failure, responds with [`SdkError<UpdateWorkflowError>`](crate::error::UpdateWorkflowError)
    pub fn update_workflow(&self) -> fluent_builders::UpdateWorkflow {
        fluent_builders::UpdateWorkflow::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`UpdateWorkflowStep`](crate::client::fluent_builders::UpdateWorkflowStep) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`id(impl Into<String>)`](crate::client::fluent_builders::UpdateWorkflowStep::id) / [`set_id(Option<String>)`](crate::client::fluent_builders::UpdateWorkflowStep::set_id): <p>The ID of the step.</p>
    ///   - [`step_group_id(impl Into<String>)`](crate::client::fluent_builders::UpdateWorkflowStep::step_group_id) / [`set_step_group_id(Option<String>)`](crate::client::fluent_builders::UpdateWorkflowStep::set_step_group_id): <p>The ID of the step group.</p>
    ///   - [`workflow_id(impl Into<String>)`](crate::client::fluent_builders::UpdateWorkflowStep::workflow_id) / [`set_workflow_id(Option<String>)`](crate::client::fluent_builders::UpdateWorkflowStep::set_workflow_id): <p>The ID of the migration workflow.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::UpdateWorkflowStep::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::UpdateWorkflowStep::set_name): <p>The name of the step.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::UpdateWorkflowStep::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::UpdateWorkflowStep::set_description): <p>The description of the step.</p>
    ///   - [`step_action_type(StepActionType)`](crate::client::fluent_builders::UpdateWorkflowStep::step_action_type) / [`set_step_action_type(Option<StepActionType>)`](crate::client::fluent_builders::UpdateWorkflowStep::set_step_action_type): <p>The action type of the step. You must run and update the status of a manual step for the workflow to continue after the completion of the step.</p>
    ///   - [`workflow_step_automation_configuration(WorkflowStepAutomationConfiguration)`](crate::client::fluent_builders::UpdateWorkflowStep::workflow_step_automation_configuration) / [`set_workflow_step_automation_configuration(Option<WorkflowStepAutomationConfiguration>)`](crate::client::fluent_builders::UpdateWorkflowStep::set_workflow_step_automation_configuration): <p>The custom script to run tests on the source and target environments.</p>
    ///   - [`step_target(Vec<String>)`](crate::client::fluent_builders::UpdateWorkflowStep::step_target) / [`set_step_target(Option<Vec<String>>)`](crate::client::fluent_builders::UpdateWorkflowStep::set_step_target): <p>The servers on which a step will be run.</p>
    ///   - [`outputs(Vec<WorkflowStepOutput>)`](crate::client::fluent_builders::UpdateWorkflowStep::outputs) / [`set_outputs(Option<Vec<WorkflowStepOutput>>)`](crate::client::fluent_builders::UpdateWorkflowStep::set_outputs): <p>The outputs of a step.</p>
    ///   - [`previous(Vec<String>)`](crate::client::fluent_builders::UpdateWorkflowStep::previous) / [`set_previous(Option<Vec<String>>)`](crate::client::fluent_builders::UpdateWorkflowStep::set_previous): <p>The previous step.</p>
    ///   - [`next(Vec<String>)`](crate::client::fluent_builders::UpdateWorkflowStep::next) / [`set_next(Option<Vec<String>>)`](crate::client::fluent_builders::UpdateWorkflowStep::set_next): <p>The next step.</p>
    ///   - [`status(StepStatus)`](crate::client::fluent_builders::UpdateWorkflowStep::status) / [`set_status(Option<StepStatus>)`](crate::client::fluent_builders::UpdateWorkflowStep::set_status): <p>The status of the step.</p>
    /// - On success, responds with [`UpdateWorkflowStepOutput`](crate::output::UpdateWorkflowStepOutput) with field(s):
    ///   - [`id(Option<String>)`](crate::output::UpdateWorkflowStepOutput::id): <p>The ID of the step.</p>
    ///   - [`step_group_id(Option<String>)`](crate::output::UpdateWorkflowStepOutput::step_group_id): <p>The ID of the step group.</p>
    ///   - [`workflow_id(Option<String>)`](crate::output::UpdateWorkflowStepOutput::workflow_id): <p>The ID of the migration workflow.</p>
    ///   - [`name(Option<String>)`](crate::output::UpdateWorkflowStepOutput::name): <p>The name of the step.</p>
    /// - On failure, responds with [`SdkError<UpdateWorkflowStepError>`](crate::error::UpdateWorkflowStepError)
    pub fn update_workflow_step(&self) -> fluent_builders::UpdateWorkflowStep {
        fluent_builders::UpdateWorkflowStep::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`UpdateWorkflowStepGroup`](crate::client::fluent_builders::UpdateWorkflowStepGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`workflow_id(impl Into<String>)`](crate::client::fluent_builders::UpdateWorkflowStepGroup::workflow_id) / [`set_workflow_id(Option<String>)`](crate::client::fluent_builders::UpdateWorkflowStepGroup::set_workflow_id): <p>The ID of the migration workflow.</p>
    ///   - [`id(impl Into<String>)`](crate::client::fluent_builders::UpdateWorkflowStepGroup::id) / [`set_id(Option<String>)`](crate::client::fluent_builders::UpdateWorkflowStepGroup::set_id): <p>The ID of the step group.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::UpdateWorkflowStepGroup::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::UpdateWorkflowStepGroup::set_name): <p>The name of the step group.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::UpdateWorkflowStepGroup::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::UpdateWorkflowStepGroup::set_description): <p>The description of the step group.</p>
    ///   - [`next(Vec<String>)`](crate::client::fluent_builders::UpdateWorkflowStepGroup::next) / [`set_next(Option<Vec<String>>)`](crate::client::fluent_builders::UpdateWorkflowStepGroup::set_next): <p>The next step group.</p>
    ///   - [`previous(Vec<String>)`](crate::client::fluent_builders::UpdateWorkflowStepGroup::previous) / [`set_previous(Option<Vec<String>>)`](crate::client::fluent_builders::UpdateWorkflowStepGroup::set_previous): <p>The previous step group.</p>
    /// - On success, responds with [`UpdateWorkflowStepGroupOutput`](crate::output::UpdateWorkflowStepGroupOutput) with field(s):
    ///   - [`workflow_id(Option<String>)`](crate::output::UpdateWorkflowStepGroupOutput::workflow_id): <p>The ID of the migration workflow.</p>
    ///   - [`name(Option<String>)`](crate::output::UpdateWorkflowStepGroupOutput::name): <p>The name of the step group.</p>
    ///   - [`id(Option<String>)`](crate::output::UpdateWorkflowStepGroupOutput::id): <p>The ID of the step group.</p>
    ///   - [`description(Option<String>)`](crate::output::UpdateWorkflowStepGroupOutput::description): <p>The description of the step group.</p>
    ///   - [`tools(Option<Vec<Tool>>)`](crate::output::UpdateWorkflowStepGroupOutput::tools): <p>List of AWS services utilized in a migration workflow.</p>
    ///   - [`next(Option<Vec<String>>)`](crate::output::UpdateWorkflowStepGroupOutput::next): <p>The next step group.</p>
    ///   - [`previous(Option<Vec<String>>)`](crate::output::UpdateWorkflowStepGroupOutput::previous): <p>The previous step group.</p>
    ///   - [`last_modified_time(Option<DateTime>)`](crate::output::UpdateWorkflowStepGroupOutput::last_modified_time): <p>The time at which the step group was last modified.</p>
    /// - On failure, responds with [`SdkError<UpdateWorkflowStepGroupError>`](crate::error::UpdateWorkflowStepGroupError)
    pub fn update_workflow_step_group(&self) -> fluent_builders::UpdateWorkflowStepGroup {
        fluent_builders::UpdateWorkflowStepGroup::new(self.handle.clone())
    }
}
pub mod fluent_builders {

    //! Utilities to ergonomically construct a request to the service.
    //!
    //! Fluent builders are created through the [`Client`](crate::client::Client) by calling
    //! one if its operation methods. After parameters are set using the builder methods,
    //! the `send` method can be called to initiate the request.
    /// Fluent builder constructing a request to `CreateWorkflow`.
    ///
    /// <p>Create a workflow to orchestrate your migrations.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateWorkflow {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_workflow_input::Builder,
    }
    impl CreateWorkflow {
        /// Creates a new `CreateWorkflow`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::CreateWorkflow,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateWorkflowError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::CreateWorkflowOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateWorkflowError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The name of the migration workflow.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>The name of the migration workflow.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
        /// <p>The description of the migration workflow.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The description of the migration workflow.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>The ID of the template.</p>
        pub fn template_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.template_id(input.into());
            self
        }
        /// <p>The ID of the template.</p>
        pub fn set_template_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_template_id(input);
            self
        }
        /// <p>The configuration ID of the application configured in Application Discovery Service.</p>
        pub fn application_configuration_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.application_configuration_id(input.into());
            self
        }
        /// <p>The configuration ID of the application configured in Application Discovery Service.</p>
        pub fn set_application_configuration_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_application_configuration_id(input);
            self
        }
        /// Adds a key-value pair to `inputParameters`.
        ///
        /// To override the contents of this collection use [`set_input_parameters`](Self::set_input_parameters).
        ///
        /// <p>The input parameters required to create a migration workflow.</p>
        pub fn input_parameters(
            mut self,
            k: impl Into<std::string::String>,
            v: crate::model::StepInput,
        ) -> Self {
            self.inner = self.inner.input_parameters(k.into(), v);
            self
        }
        /// <p>The input parameters required to create a migration workflow.</p>
        pub fn set_input_parameters(
            mut self,
            input: std::option::Option<
                std::collections::HashMap<std::string::String, crate::model::StepInput>,
            >,
        ) -> Self {
            self.inner = self.inner.set_input_parameters(input);
            self
        }
        /// Appends an item to `stepTargets`.
        ///
        /// To override the contents of this collection use [`set_step_targets`](Self::set_step_targets).
        ///
        /// <p>The servers on which a step will be run.</p>
        pub fn step_targets(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.step_targets(input.into());
            self
        }
        /// <p>The servers on which a step will be run.</p>
        pub fn set_step_targets(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_step_targets(input);
            self
        }
        /// Adds a key-value pair to `tags`.
        ///
        /// To override the contents of this collection use [`set_tags`](Self::set_tags).
        ///
        /// <p>The tags to add on a migration workflow.</p>
        pub fn tags(
            mut self,
            k: impl Into<std::string::String>,
            v: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.tags(k.into(), v.into());
            self
        }
        /// <p>The tags to add on a migration workflow.</p>
        pub fn set_tags(
            mut self,
            input: std::option::Option<
                std::collections::HashMap<std::string::String, std::string::String>,
            >,
        ) -> Self {
            self.inner = self.inner.set_tags(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateWorkflowStep`.
    ///
    /// <p>Create a step in the migration workflow.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateWorkflowStep {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_workflow_step_input::Builder,
    }
    impl CreateWorkflowStep {
        /// Creates a new `CreateWorkflowStep`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::CreateWorkflowStep,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateWorkflowStepError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::CreateWorkflowStepOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateWorkflowStepError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The name of the step.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>The name of the step.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn step_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.step_group_id(input.into());
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn set_step_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_step_group_id(input);
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn workflow_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.workflow_id(input.into());
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn set_workflow_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_workflow_id(input);
            self
        }
        /// <p>The action type of the step. You must run and update the status of a manual step for the workflow to continue after the completion of the step.</p>
        pub fn step_action_type(mut self, input: crate::model::StepActionType) -> Self {
            self.inner = self.inner.step_action_type(input);
            self
        }
        /// <p>The action type of the step. You must run and update the status of a manual step for the workflow to continue after the completion of the step.</p>
        pub fn set_step_action_type(
            mut self,
            input: std::option::Option<crate::model::StepActionType>,
        ) -> Self {
            self.inner = self.inner.set_step_action_type(input);
            self
        }
        /// <p>The description of the step.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The description of the step.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>The custom script to run tests on source or target environments.</p>
        pub fn workflow_step_automation_configuration(
            mut self,
            input: crate::model::WorkflowStepAutomationConfiguration,
        ) -> Self {
            self.inner = self.inner.workflow_step_automation_configuration(input);
            self
        }
        /// <p>The custom script to run tests on source or target environments.</p>
        pub fn set_workflow_step_automation_configuration(
            mut self,
            input: std::option::Option<crate::model::WorkflowStepAutomationConfiguration>,
        ) -> Self {
            self.inner = self.inner.set_workflow_step_automation_configuration(input);
            self
        }
        /// Appends an item to `stepTarget`.
        ///
        /// To override the contents of this collection use [`set_step_target`](Self::set_step_target).
        ///
        /// <p>The servers on which a step will be run.</p>
        pub fn step_target(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.step_target(input.into());
            self
        }
        /// <p>The servers on which a step will be run.</p>
        pub fn set_step_target(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_step_target(input);
            self
        }
        /// Appends an item to `outputs`.
        ///
        /// To override the contents of this collection use [`set_outputs`](Self::set_outputs).
        ///
        /// <p>The key value pairs added for the expected output.</p>
        pub fn outputs(mut self, input: crate::model::WorkflowStepOutput) -> Self {
            self.inner = self.inner.outputs(input);
            self
        }
        /// <p>The key value pairs added for the expected output.</p>
        pub fn set_outputs(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::WorkflowStepOutput>>,
        ) -> Self {
            self.inner = self.inner.set_outputs(input);
            self
        }
        /// Appends an item to `previous`.
        ///
        /// To override the contents of this collection use [`set_previous`](Self::set_previous).
        ///
        /// <p>The previous step.</p>
        pub fn previous(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.previous(input.into());
            self
        }
        /// <p>The previous step.</p>
        pub fn set_previous(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_previous(input);
            self
        }
        /// Appends an item to `next`.
        ///
        /// To override the contents of this collection use [`set_next`](Self::set_next).
        ///
        /// <p>The next step.</p>
        pub fn next(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next(input.into());
            self
        }
        /// <p>The next step.</p>
        pub fn set_next(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_next(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateWorkflowStepGroup`.
    ///
    /// <p>Create a step group in a migration workflow.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateWorkflowStepGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_workflow_step_group_input::Builder,
    }
    impl CreateWorkflowStepGroup {
        /// Creates a new `CreateWorkflowStepGroup`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::CreateWorkflowStepGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateWorkflowStepGroupError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::CreateWorkflowStepGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateWorkflowStepGroupError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The ID of the migration workflow that will contain the step group.</p>
        pub fn workflow_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.workflow_id(input.into());
            self
        }
        /// <p>The ID of the migration workflow that will contain the step group.</p>
        pub fn set_workflow_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_workflow_id(input);
            self
        }
        /// <p>The name of the step group.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>The name of the step group.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
        /// <p>The description of the step group.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The description of the step group.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// Appends an item to `next`.
        ///
        /// To override the contents of this collection use [`set_next`](Self::set_next).
        ///
        /// <p>The next step group.</p>
        pub fn next(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next(input.into());
            self
        }
        /// <p>The next step group.</p>
        pub fn set_next(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_next(input);
            self
        }
        /// Appends an item to `previous`.
        ///
        /// To override the contents of this collection use [`set_previous`](Self::set_previous).
        ///
        /// <p>The previous step group.</p>
        pub fn previous(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.previous(input.into());
            self
        }
        /// <p>The previous step group.</p>
        pub fn set_previous(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_previous(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteWorkflow`.
    ///
    /// <p>Delete a migration workflow. You must pause a running workflow in Migration Hub Orchestrator console to delete it.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteWorkflow {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_workflow_input::Builder,
    }
    impl DeleteWorkflow {
        /// Creates a new `DeleteWorkflow`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::DeleteWorkflow,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteWorkflowError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::DeleteWorkflowOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteWorkflowError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The ID of the migration workflow you want to delete.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.id(input.into());
            self
        }
        /// <p>The ID of the migration workflow you want to delete.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteWorkflowStep`.
    ///
    /// <p>Delete a step in a migration workflow. Pause the workflow to delete a running step.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteWorkflowStep {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_workflow_step_input::Builder,
    }
    impl DeleteWorkflowStep {
        /// Creates a new `DeleteWorkflowStep`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::DeleteWorkflowStep,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteWorkflowStepError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::DeleteWorkflowStepOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteWorkflowStepError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The ID of the step you want to delete.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.id(input.into());
            self
        }
        /// <p>The ID of the step you want to delete.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_id(input);
            self
        }
        /// <p>The ID of the step group that contains the step you want to delete.</p>
        pub fn step_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.step_group_id(input.into());
            self
        }
        /// <p>The ID of the step group that contains the step you want to delete.</p>
        pub fn set_step_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_step_group_id(input);
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn workflow_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.workflow_id(input.into());
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn set_workflow_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_workflow_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteWorkflowStepGroup`.
    ///
    /// <p>Delete a step group in a migration workflow.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteWorkflowStepGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_workflow_step_group_input::Builder,
    }
    impl DeleteWorkflowStepGroup {
        /// Creates a new `DeleteWorkflowStepGroup`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::DeleteWorkflowStepGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteWorkflowStepGroupError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::DeleteWorkflowStepGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteWorkflowStepGroupError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn workflow_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.workflow_id(input.into());
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn set_workflow_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_workflow_id(input);
            self
        }
        /// <p>The ID of the step group you want to delete.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.id(input.into());
            self
        }
        /// <p>The ID of the step group you want to delete.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetTemplate`.
    ///
    /// <p>Get the template you want to use for creating a migration workflow.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetTemplate {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_template_input::Builder,
    }
    impl GetTemplate {
        /// Creates a new `GetTemplate`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::GetTemplate,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetTemplateError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::GetTemplateOutput,
            aws_smithy_http::result::SdkError<crate::error::GetTemplateError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The ID of the template.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.id(input.into());
            self
        }
        /// <p>The ID of the template.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetTemplateStep`.
    ///
    /// <p>Get a specific step in a template.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetTemplateStep {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_template_step_input::Builder,
    }
    impl GetTemplateStep {
        /// Creates a new `GetTemplateStep`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::GetTemplateStep,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetTemplateStepError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::GetTemplateStepOutput,
            aws_smithy_http::result::SdkError<crate::error::GetTemplateStepError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The ID of the step.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.id(input.into());
            self
        }
        /// <p>The ID of the step.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_id(input);
            self
        }
        /// <p>The ID of the template.</p>
        pub fn template_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.template_id(input.into());
            self
        }
        /// <p>The ID of the template.</p>
        pub fn set_template_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_template_id(input);
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn step_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.step_group_id(input.into());
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn set_step_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_step_group_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetTemplateStepGroup`.
    ///
    /// <p>Get a step group in a template.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetTemplateStepGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_template_step_group_input::Builder,
    }
    impl GetTemplateStepGroup {
        /// Creates a new `GetTemplateStepGroup`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::GetTemplateStepGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetTemplateStepGroupError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::GetTemplateStepGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::GetTemplateStepGroupError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The ID of the template.</p>
        pub fn template_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.template_id(input.into());
            self
        }
        /// <p>The ID of the template.</p>
        pub fn set_template_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_template_id(input);
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.id(input.into());
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetWorkflow`.
    ///
    /// <p>Get migration workflow.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetWorkflow {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_workflow_input::Builder,
    }
    impl GetWorkflow {
        /// Creates a new `GetWorkflow`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::GetWorkflow,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetWorkflowError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::GetWorkflowOutput,
            aws_smithy_http::result::SdkError<crate::error::GetWorkflowError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.id(input.into());
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetWorkflowStep`.
    ///
    /// <p>Get a step in the migration workflow.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetWorkflowStep {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_workflow_step_input::Builder,
    }
    impl GetWorkflowStep {
        /// Creates a new `GetWorkflowStep`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::GetWorkflowStep,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetWorkflowStepError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::GetWorkflowStepOutput,
            aws_smithy_http::result::SdkError<crate::error::GetWorkflowStepError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn workflow_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.workflow_id(input.into());
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn set_workflow_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_workflow_id(input);
            self
        }
        /// <p>desThe ID of the step group.</p>
        pub fn step_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.step_group_id(input.into());
            self
        }
        /// <p>desThe ID of the step group.</p>
        pub fn set_step_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_step_group_id(input);
            self
        }
        /// <p>The ID of the step.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.id(input.into());
            self
        }
        /// <p>The ID of the step.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetWorkflowStepGroup`.
    ///
    /// <p>Get the step group of a migration workflow.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetWorkflowStepGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_workflow_step_group_input::Builder,
    }
    impl GetWorkflowStepGroup {
        /// Creates a new `GetWorkflowStepGroup`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::GetWorkflowStepGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetWorkflowStepGroupError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::GetWorkflowStepGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::GetWorkflowStepGroupError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The ID of the step group.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.id(input.into());
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_id(input);
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn workflow_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.workflow_id(input.into());
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn set_workflow_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_workflow_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListPlugins`.
    ///
    /// <p>List AWS Migration Hub Orchestrator plugins.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListPlugins {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_plugins_input::Builder,
    }
    impl ListPlugins {
        /// Creates a new `ListPlugins`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::ListPlugins,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListPluginsError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::ListPluginsOutput,
            aws_smithy_http::result::SdkError<crate::error::ListPluginsError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// Create a paginator for this request
        ///
        /// Paginators are used by calling [`send().await`](crate::paginator::ListPluginsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListPluginsPaginator {
            crate::paginator::ListPluginsPaginator::new(self.handle, self.inner)
        }
        /// <p>The maximum number of plugins that can be returned.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of plugins that can be returned.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>The pagination token.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>The pagination token.</p>
        pub fn set_next_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_next_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListTagsForResource`.
    ///
    /// <p>List the tags added to a resource.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListTagsForResource {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_tags_for_resource_input::Builder,
    }
    impl ListTagsForResource {
        /// Creates a new `ListTagsForResource`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::ListTagsForResource,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListTagsForResourceError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::ListTagsForResourceOutput,
            aws_smithy_http::result::SdkError<crate::error::ListTagsForResourceError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The Amazon Resource Name (ARN) of the resource.</p>
        pub fn resource_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource_arn(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the resource.</p>
        pub fn set_resource_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_resource_arn(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListTemplates`.
    ///
    /// <p>List the templates available in Migration Hub Orchestrator to create a migration workflow.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListTemplates {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_templates_input::Builder,
    }
    impl ListTemplates {
        /// Creates a new `ListTemplates`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::ListTemplates,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListTemplatesError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::ListTemplatesOutput,
            aws_smithy_http::result::SdkError<crate::error::ListTemplatesError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// Create a paginator for this request
        ///
        /// Paginators are used by calling [`send().await`](crate::paginator::ListTemplatesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListTemplatesPaginator {
            crate::paginator::ListTemplatesPaginator::new(self.handle, self.inner)
        }
        /// <p>The maximum number of results that can be returned.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results that can be returned.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>The pagination token.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>The pagination token.</p>
        pub fn set_next_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_next_token(input);
            self
        }
        /// <p>The name of the template.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>The name of the template.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListTemplateStepGroups`.
    ///
    /// <p>List the step groups in a template.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListTemplateStepGroups {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_template_step_groups_input::Builder,
    }
    impl ListTemplateStepGroups {
        /// Creates a new `ListTemplateStepGroups`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::ListTemplateStepGroups,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListTemplateStepGroupsError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::ListTemplateStepGroupsOutput,
            aws_smithy_http::result::SdkError<crate::error::ListTemplateStepGroupsError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// Create a paginator for this request
        ///
        /// Paginators are used by calling [`send().await`](crate::paginator::ListTemplateStepGroupsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListTemplateStepGroupsPaginator {
            crate::paginator::ListTemplateStepGroupsPaginator::new(self.handle, self.inner)
        }
        /// <p>The maximum number of results that can be returned.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results that can be returned.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>The pagination token.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>The pagination token.</p>
        pub fn set_next_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_next_token(input);
            self
        }
        /// <p>The ID of the template.</p>
        pub fn template_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.template_id(input.into());
            self
        }
        /// <p>The ID of the template.</p>
        pub fn set_template_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_template_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListTemplateSteps`.
    ///
    /// <p>List the steps in a template.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListTemplateSteps {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_template_steps_input::Builder,
    }
    impl ListTemplateSteps {
        /// Creates a new `ListTemplateSteps`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::ListTemplateSteps,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListTemplateStepsError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::ListTemplateStepsOutput,
            aws_smithy_http::result::SdkError<crate::error::ListTemplateStepsError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// Create a paginator for this request
        ///
        /// Paginators are used by calling [`send().await`](crate::paginator::ListTemplateStepsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListTemplateStepsPaginator {
            crate::paginator::ListTemplateStepsPaginator::new(self.handle, self.inner)
        }
        /// <p>The maximum number of results that can be returned.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results that can be returned.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>The pagination token.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>The pagination token.</p>
        pub fn set_next_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_next_token(input);
            self
        }
        /// <p>The ID of the template.</p>
        pub fn template_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.template_id(input.into());
            self
        }
        /// <p>The ID of the template.</p>
        pub fn set_template_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_template_id(input);
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn step_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.step_group_id(input.into());
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn set_step_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_step_group_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListWorkflows`.
    ///
    /// <p>List the migration workflows.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListWorkflows {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_workflows_input::Builder,
    }
    impl ListWorkflows {
        /// Creates a new `ListWorkflows`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::ListWorkflows,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListWorkflowsError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::ListWorkflowsOutput,
            aws_smithy_http::result::SdkError<crate::error::ListWorkflowsError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// Create a paginator for this request
        ///
        /// Paginators are used by calling [`send().await`](crate::paginator::ListWorkflowsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListWorkflowsPaginator {
            crate::paginator::ListWorkflowsPaginator::new(self.handle, self.inner)
        }
        /// <p>The maximum number of results that can be returned.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results that can be returned.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>The pagination token.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>The pagination token.</p>
        pub fn set_next_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_next_token(input);
            self
        }
        /// <p>The ID of the template.</p>
        pub fn template_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.template_id(input.into());
            self
        }
        /// <p>The ID of the template.</p>
        pub fn set_template_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_template_id(input);
            self
        }
        /// <p>The name of the application configured in Application Discovery Service.</p>
        pub fn ads_application_configuration_name(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.ads_application_configuration_name(input.into());
            self
        }
        /// <p>The name of the application configured in Application Discovery Service.</p>
        pub fn set_ads_application_configuration_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ads_application_configuration_name(input);
            self
        }
        /// <p>The status of the migration workflow.</p>
        pub fn status(mut self, input: crate::model::MigrationWorkflowStatusEnum) -> Self {
            self.inner = self.inner.status(input);
            self
        }
        /// <p>The status of the migration workflow.</p>
        pub fn set_status(
            mut self,
            input: std::option::Option<crate::model::MigrationWorkflowStatusEnum>,
        ) -> Self {
            self.inner = self.inner.set_status(input);
            self
        }
        /// <p>The name of the migration workflow.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>The name of the migration workflow.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListWorkflowStepGroups`.
    ///
    /// <p>List the step groups in a migration workflow.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListWorkflowStepGroups {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_workflow_step_groups_input::Builder,
    }
    impl ListWorkflowStepGroups {
        /// Creates a new `ListWorkflowStepGroups`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::ListWorkflowStepGroups,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListWorkflowStepGroupsError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::ListWorkflowStepGroupsOutput,
            aws_smithy_http::result::SdkError<crate::error::ListWorkflowStepGroupsError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// Create a paginator for this request
        ///
        /// Paginators are used by calling [`send().await`](crate::paginator::ListWorkflowStepGroupsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListWorkflowStepGroupsPaginator {
            crate::paginator::ListWorkflowStepGroupsPaginator::new(self.handle, self.inner)
        }
        /// <p>The pagination token.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>The pagination token.</p>
        pub fn set_next_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_next_token(input);
            self
        }
        /// <p>The maximum number of results that can be returned.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results that can be returned.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn workflow_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.workflow_id(input.into());
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn set_workflow_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_workflow_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListWorkflowSteps`.
    ///
    /// <p>List the steps in a workflow.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListWorkflowSteps {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_workflow_steps_input::Builder,
    }
    impl ListWorkflowSteps {
        /// Creates a new `ListWorkflowSteps`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::ListWorkflowSteps,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListWorkflowStepsError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::ListWorkflowStepsOutput,
            aws_smithy_http::result::SdkError<crate::error::ListWorkflowStepsError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// Create a paginator for this request
        ///
        /// Paginators are used by calling [`send().await`](crate::paginator::ListWorkflowStepsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListWorkflowStepsPaginator {
            crate::paginator::ListWorkflowStepsPaginator::new(self.handle, self.inner)
        }
        /// <p>The pagination token.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>The pagination token.</p>
        pub fn set_next_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_next_token(input);
            self
        }
        /// <p>The maximum number of results that can be returned.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results that can be returned.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn workflow_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.workflow_id(input.into());
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn set_workflow_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_workflow_id(input);
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn step_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.step_group_id(input.into());
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn set_step_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_step_group_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RetryWorkflowStep`.
    ///
    /// <p>Retry a failed step in a migration workflow.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RetryWorkflowStep {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::retry_workflow_step_input::Builder,
    }
    impl RetryWorkflowStep {
        /// Creates a new `RetryWorkflowStep`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::RetryWorkflowStep,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RetryWorkflowStepError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::RetryWorkflowStepOutput,
            aws_smithy_http::result::SdkError<crate::error::RetryWorkflowStepError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn workflow_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.workflow_id(input.into());
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn set_workflow_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_workflow_id(input);
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn step_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.step_group_id(input.into());
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn set_step_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_step_group_id(input);
            self
        }
        /// <p>The ID of the step.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.id(input.into());
            self
        }
        /// <p>The ID of the step.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `StartWorkflow`.
    ///
    /// <p>Start a migration workflow.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct StartWorkflow {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::start_workflow_input::Builder,
    }
    impl StartWorkflow {
        /// Creates a new `StartWorkflow`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::StartWorkflow,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::StartWorkflowError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::StartWorkflowOutput,
            aws_smithy_http::result::SdkError<crate::error::StartWorkflowError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.id(input.into());
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `StopWorkflow`.
    ///
    /// <p>Stop an ongoing migration workflow.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct StopWorkflow {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::stop_workflow_input::Builder,
    }
    impl StopWorkflow {
        /// Creates a new `StopWorkflow`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::StopWorkflow,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::StopWorkflowError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::StopWorkflowOutput,
            aws_smithy_http::result::SdkError<crate::error::StopWorkflowError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.id(input.into());
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `TagResource`.
    ///
    /// <p>Tag a resource by specifying its Amazon Resource Name (ARN).</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct TagResource {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::tag_resource_input::Builder,
    }
    impl TagResource {
        /// Creates a new `TagResource`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::TagResource,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::TagResourceError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::TagResourceOutput,
            aws_smithy_http::result::SdkError<crate::error::TagResourceError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The Amazon Resource Name (ARN) of the resource to which you want to add tags.</p>
        pub fn resource_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource_arn(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the resource to which you want to add tags.</p>
        pub fn set_resource_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_resource_arn(input);
            self
        }
        /// Adds a key-value pair to `tags`.
        ///
        /// To override the contents of this collection use [`set_tags`](Self::set_tags).
        ///
        /// <p>A collection of labels, in the form of key:value pairs, that apply to this resource.</p>
        pub fn tags(
            mut self,
            k: impl Into<std::string::String>,
            v: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.tags(k.into(), v.into());
            self
        }
        /// <p>A collection of labels, in the form of key:value pairs, that apply to this resource.</p>
        pub fn set_tags(
            mut self,
            input: std::option::Option<
                std::collections::HashMap<std::string::String, std::string::String>,
            >,
        ) -> Self {
            self.inner = self.inner.set_tags(input);
            self
        }
    }
    /// Fluent builder constructing a request to `UntagResource`.
    ///
    /// <p>Deletes the tags for a resource.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct UntagResource {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::untag_resource_input::Builder,
    }
    impl UntagResource {
        /// Creates a new `UntagResource`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::UntagResource,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::UntagResourceError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::UntagResourceOutput,
            aws_smithy_http::result::SdkError<crate::error::UntagResourceError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The Amazon Resource Name (ARN) of the resource from which you want to remove tags.</p>
        pub fn resource_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource_arn(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the resource from which you want to remove tags.</p>
        pub fn set_resource_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_resource_arn(input);
            self
        }
        /// Appends an item to `tagKeys`.
        ///
        /// To override the contents of this collection use [`set_tag_keys`](Self::set_tag_keys).
        ///
        /// <p>One or more tag keys. Specify only the tag keys, not the tag values.</p>
        pub fn tag_keys(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.tag_keys(input.into());
            self
        }
        /// <p>One or more tag keys. Specify only the tag keys, not the tag values.</p>
        pub fn set_tag_keys(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_tag_keys(input);
            self
        }
    }
    /// Fluent builder constructing a request to `UpdateWorkflow`.
    ///
    /// <p>Update a migration workflow.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct UpdateWorkflow {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::update_workflow_input::Builder,
    }
    impl UpdateWorkflow {
        /// Creates a new `UpdateWorkflow`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::UpdateWorkflow,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::UpdateWorkflowError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::UpdateWorkflowOutput,
            aws_smithy_http::result::SdkError<crate::error::UpdateWorkflowError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.id(input.into());
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_id(input);
            self
        }
        /// <p>The name of the migration workflow.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>The name of the migration workflow.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
        /// <p>The description of the migration workflow.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The description of the migration workflow.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// Adds a key-value pair to `inputParameters`.
        ///
        /// To override the contents of this collection use [`set_input_parameters`](Self::set_input_parameters).
        ///
        /// <p>The input parameters required to update a migration workflow.</p>
        pub fn input_parameters(
            mut self,
            k: impl Into<std::string::String>,
            v: crate::model::StepInput,
        ) -> Self {
            self.inner = self.inner.input_parameters(k.into(), v);
            self
        }
        /// <p>The input parameters required to update a migration workflow.</p>
        pub fn set_input_parameters(
            mut self,
            input: std::option::Option<
                std::collections::HashMap<std::string::String, crate::model::StepInput>,
            >,
        ) -> Self {
            self.inner = self.inner.set_input_parameters(input);
            self
        }
        /// Appends an item to `stepTargets`.
        ///
        /// To override the contents of this collection use [`set_step_targets`](Self::set_step_targets).
        ///
        /// <p>The servers on which a step will be run.</p>
        pub fn step_targets(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.step_targets(input.into());
            self
        }
        /// <p>The servers on which a step will be run.</p>
        pub fn set_step_targets(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_step_targets(input);
            self
        }
    }
    /// Fluent builder constructing a request to `UpdateWorkflowStep`.
    ///
    /// <p>Update a step in a migration workflow.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct UpdateWorkflowStep {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::update_workflow_step_input::Builder,
    }
    impl UpdateWorkflowStep {
        /// Creates a new `UpdateWorkflowStep`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::UpdateWorkflowStep,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::UpdateWorkflowStepError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::UpdateWorkflowStepOutput,
            aws_smithy_http::result::SdkError<crate::error::UpdateWorkflowStepError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The ID of the step.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.id(input.into());
            self
        }
        /// <p>The ID of the step.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_id(input);
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn step_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.step_group_id(input.into());
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn set_step_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_step_group_id(input);
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn workflow_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.workflow_id(input.into());
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn set_workflow_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_workflow_id(input);
            self
        }
        /// <p>The name of the step.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>The name of the step.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
        /// <p>The description of the step.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The description of the step.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>The action type of the step. You must run and update the status of a manual step for the workflow to continue after the completion of the step.</p>
        pub fn step_action_type(mut self, input: crate::model::StepActionType) -> Self {
            self.inner = self.inner.step_action_type(input);
            self
        }
        /// <p>The action type of the step. You must run and update the status of a manual step for the workflow to continue after the completion of the step.</p>
        pub fn set_step_action_type(
            mut self,
            input: std::option::Option<crate::model::StepActionType>,
        ) -> Self {
            self.inner = self.inner.set_step_action_type(input);
            self
        }
        /// <p>The custom script to run tests on the source and target environments.</p>
        pub fn workflow_step_automation_configuration(
            mut self,
            input: crate::model::WorkflowStepAutomationConfiguration,
        ) -> Self {
            self.inner = self.inner.workflow_step_automation_configuration(input);
            self
        }
        /// <p>The custom script to run tests on the source and target environments.</p>
        pub fn set_workflow_step_automation_configuration(
            mut self,
            input: std::option::Option<crate::model::WorkflowStepAutomationConfiguration>,
        ) -> Self {
            self.inner = self.inner.set_workflow_step_automation_configuration(input);
            self
        }
        /// Appends an item to `stepTarget`.
        ///
        /// To override the contents of this collection use [`set_step_target`](Self::set_step_target).
        ///
        /// <p>The servers on which a step will be run.</p>
        pub fn step_target(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.step_target(input.into());
            self
        }
        /// <p>The servers on which a step will be run.</p>
        pub fn set_step_target(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_step_target(input);
            self
        }
        /// Appends an item to `outputs`.
        ///
        /// To override the contents of this collection use [`set_outputs`](Self::set_outputs).
        ///
        /// <p>The outputs of a step.</p>
        pub fn outputs(mut self, input: crate::model::WorkflowStepOutput) -> Self {
            self.inner = self.inner.outputs(input);
            self
        }
        /// <p>The outputs of a step.</p>
        pub fn set_outputs(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::WorkflowStepOutput>>,
        ) -> Self {
            self.inner = self.inner.set_outputs(input);
            self
        }
        /// Appends an item to `previous`.
        ///
        /// To override the contents of this collection use [`set_previous`](Self::set_previous).
        ///
        /// <p>The previous step.</p>
        pub fn previous(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.previous(input.into());
            self
        }
        /// <p>The previous step.</p>
        pub fn set_previous(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_previous(input);
            self
        }
        /// Appends an item to `next`.
        ///
        /// To override the contents of this collection use [`set_next`](Self::set_next).
        ///
        /// <p>The next step.</p>
        pub fn next(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next(input.into());
            self
        }
        /// <p>The next step.</p>
        pub fn set_next(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_next(input);
            self
        }
        /// <p>The status of the step.</p>
        pub fn status(mut self, input: crate::model::StepStatus) -> Self {
            self.inner = self.inner.status(input);
            self
        }
        /// <p>The status of the step.</p>
        pub fn set_status(mut self, input: std::option::Option<crate::model::StepStatus>) -> Self {
            self.inner = self.inner.set_status(input);
            self
        }
    }
    /// Fluent builder constructing a request to `UpdateWorkflowStepGroup`.
    ///
    /// <p>Update the step group in a migration workflow.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct UpdateWorkflowStepGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::update_workflow_step_group_input::Builder,
    }
    impl UpdateWorkflowStepGroup {
        /// Creates a new `UpdateWorkflowStepGroup`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

        /// Consume this builder, creating a customizable operation that can be modified before being
        /// sent. The operation's inner [http::Request] can be modified as well.
        pub async fn customize(
            self,
        ) -> std::result::Result<
            crate::operation::customize::CustomizableOperation<
                crate::operation::UpdateWorkflowStepGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::UpdateWorkflowStepGroupError>,
        > {
            let handle = self.handle.clone();
            let operation = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            Ok(crate::operation::customize::CustomizableOperation { handle, operation })
        }

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::UpdateWorkflowStepGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::UpdateWorkflowStepGroupError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn workflow_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.workflow_id(input.into());
            self
        }
        /// <p>The ID of the migration workflow.</p>
        pub fn set_workflow_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_workflow_id(input);
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.id(input.into());
            self
        }
        /// <p>The ID of the step group.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_id(input);
            self
        }
        /// <p>The name of the step group.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>The name of the step group.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
        /// <p>The description of the step group.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The description of the step group.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// Appends an item to `next`.
        ///
        /// To override the contents of this collection use [`set_next`](Self::set_next).
        ///
        /// <p>The next step group.</p>
        pub fn next(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next(input.into());
            self
        }
        /// <p>The next step group.</p>
        pub fn set_next(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_next(input);
            self
        }
        /// Appends an item to `previous`.
        ///
        /// To override the contents of this collection use [`set_previous`](Self::set_previous).
        ///
        /// <p>The previous step group.</p>
        pub fn previous(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.previous(input.into());
            self
        }
        /// <p>The previous step group.</p>
        pub fn set_previous(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_previous(input);
            self
        }
    }
}

impl Client {
    /// Creates a new client from an [SDK Config](aws_types::sdk_config::SdkConfig).
    ///
    /// # Panics
    ///
    /// - This method will panic if the `sdk_config` is missing an async sleep implementation. If you experience this panic, set
    ///     the `sleep_impl` on the Config passed into this function to fix it.
    /// - This method will panic if the `sdk_config` is missing an HTTP connector. If you experience this panic, set the
    ///     `http_connector` on the Config passed into this function to fix it.
    pub fn new(sdk_config: &aws_types::sdk_config::SdkConfig) -> Self {
        Self::from_conf(sdk_config.into())
    }

    /// Creates a new client from the service [`Config`](crate::Config).
    ///
    /// # Panics
    ///
    /// - This method will panic if the `conf` is missing an async sleep implementation. If you experience this panic, set
    ///     the `sleep_impl` on the Config passed into this function to fix it.
    /// - This method will panic if the `conf` is missing an HTTP connector. If you experience this panic, set the
    ///     `http_connector` on the Config passed into this function to fix it.
    pub fn from_conf(conf: crate::Config) -> Self {
        let retry_config = conf
            .retry_config()
            .cloned()
            .unwrap_or_else(aws_smithy_types::retry::RetryConfig::disabled);
        let timeout_config = conf
            .timeout_config()
            .cloned()
            .unwrap_or_else(aws_smithy_types::timeout::TimeoutConfig::disabled);
        let sleep_impl = conf.sleep_impl();
        if (retry_config.has_retry() || timeout_config.has_timeouts()) && sleep_impl.is_none() {
            panic!("An async sleep implementation is required for retries or timeouts to work. \
                                    Set the `sleep_impl` on the Config passed into this function to fix this panic.");
        }

        let connector = conf.http_connector().and_then(|c| {
            let timeout_config = conf
                .timeout_config()
                .cloned()
                .unwrap_or_else(aws_smithy_types::timeout::TimeoutConfig::disabled);
            let connector_settings =
                aws_smithy_client::http_connector::ConnectorSettings::from_timeout_config(
                    &timeout_config,
                );
            c.connector(&connector_settings, conf.sleep_impl())
        });

        let builder = aws_smithy_client::Builder::new();

        let builder = match connector {
            // Use provided connector
            Some(c) => builder.connector(c),
            None => {
                #[cfg(any(feature = "rustls", feature = "native-tls"))]
                {
                    // Use default connector based on enabled features
                    builder.dyn_https_connector(
                        aws_smithy_client::http_connector::ConnectorSettings::from_timeout_config(
                            &timeout_config,
                        ),
                    )
                }
                #[cfg(not(any(feature = "rustls", feature = "native-tls")))]
                {
                    panic!("No HTTP connector was available. Enable the `rustls` or `native-tls` crate feature or set a connector to fix this.");
                }
            }
        };
        let mut builder = builder
            .middleware(aws_smithy_client::erase::DynMiddleware::new(
                crate::middleware::DefaultMiddleware::new(),
            ))
            .retry_config(retry_config.into())
            .operation_timeout_config(timeout_config.into());
        builder.set_sleep_impl(sleep_impl);
        let client = builder.build();

        Self {
            handle: std::sync::Arc::new(Handle { client, conf }),
        }
    }
}