aws-sdk-athena 0.24.0

AWS SDK for Amazon Athena
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 Amazon Athena
///
/// Client for invoking operations on Amazon Athena. Each operation on Amazon Athena 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_athena::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_athena::config::Builder::from(&shared_config)
///   .retry_config(RetryConfig::disabled())
///   .build();
/// let client = aws_sdk_athena::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 [`BatchGetNamedQuery`](crate::client::fluent_builders::BatchGetNamedQuery) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`named_query_ids(Vec<String>)`](crate::client::fluent_builders::BatchGetNamedQuery::named_query_ids) / [`set_named_query_ids(Option<Vec<String>>)`](crate::client::fluent_builders::BatchGetNamedQuery::set_named_query_ids): <p>An array of query IDs.</p>
    /// - On success, responds with [`BatchGetNamedQueryOutput`](crate::output::BatchGetNamedQueryOutput) with field(s):
    ///   - [`named_queries(Option<Vec<NamedQuery>>)`](crate::output::BatchGetNamedQueryOutput::named_queries): <p>Information about the named query IDs submitted.</p>
    ///   - [`unprocessed_named_query_ids(Option<Vec<UnprocessedNamedQueryId>>)`](crate::output::BatchGetNamedQueryOutput::unprocessed_named_query_ids): <p>Information about provided query IDs.</p>
    /// - On failure, responds with [`SdkError<BatchGetNamedQueryError>`](crate::error::BatchGetNamedQueryError)
    pub fn batch_get_named_query(&self) -> fluent_builders::BatchGetNamedQuery {
        fluent_builders::BatchGetNamedQuery::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`BatchGetPreparedStatement`](crate::client::fluent_builders::BatchGetPreparedStatement) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`prepared_statement_names(Vec<String>)`](crate::client::fluent_builders::BatchGetPreparedStatement::prepared_statement_names) / [`set_prepared_statement_names(Option<Vec<String>>)`](crate::client::fluent_builders::BatchGetPreparedStatement::set_prepared_statement_names): <p>A list of prepared statement names to return.</p>
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::BatchGetPreparedStatement::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::BatchGetPreparedStatement::set_work_group): <p>The name of the workgroup to which the prepared statements belong.</p>
    /// - On success, responds with [`BatchGetPreparedStatementOutput`](crate::output::BatchGetPreparedStatementOutput) with field(s):
    ///   - [`prepared_statements(Option<Vec<PreparedStatement>>)`](crate::output::BatchGetPreparedStatementOutput::prepared_statements): <p>The list of prepared statements returned.</p>
    ///   - [`unprocessed_prepared_statement_names(Option<Vec<UnprocessedPreparedStatementName>>)`](crate::output::BatchGetPreparedStatementOutput::unprocessed_prepared_statement_names): <p>A list of one or more prepared statements that were requested but could not be returned.</p>
    /// - On failure, responds with [`SdkError<BatchGetPreparedStatementError>`](crate::error::BatchGetPreparedStatementError)
    pub fn batch_get_prepared_statement(&self) -> fluent_builders::BatchGetPreparedStatement {
        fluent_builders::BatchGetPreparedStatement::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`BatchGetQueryExecution`](crate::client::fluent_builders::BatchGetQueryExecution) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`query_execution_ids(Vec<String>)`](crate::client::fluent_builders::BatchGetQueryExecution::query_execution_ids) / [`set_query_execution_ids(Option<Vec<String>>)`](crate::client::fluent_builders::BatchGetQueryExecution::set_query_execution_ids): <p>An array of query execution IDs.</p>
    /// - On success, responds with [`BatchGetQueryExecutionOutput`](crate::output::BatchGetQueryExecutionOutput) with field(s):
    ///   - [`query_executions(Option<Vec<QueryExecution>>)`](crate::output::BatchGetQueryExecutionOutput::query_executions): <p>Information about a query execution.</p>
    ///   - [`unprocessed_query_execution_ids(Option<Vec<UnprocessedQueryExecutionId>>)`](crate::output::BatchGetQueryExecutionOutput::unprocessed_query_execution_ids): <p>Information about the query executions that failed to run.</p>
    /// - On failure, responds with [`SdkError<BatchGetQueryExecutionError>`](crate::error::BatchGetQueryExecutionError)
    pub fn batch_get_query_execution(&self) -> fluent_builders::BatchGetQueryExecution {
        fluent_builders::BatchGetQueryExecution::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateDataCatalog`](crate::client::fluent_builders::CreateDataCatalog) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::CreateDataCatalog::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::CreateDataCatalog::set_name): <p>The name of the data catalog to create. The catalog name must be unique for the Amazon Web Services account and can use a maximum of 127 alphanumeric, underscore, at sign, or hyphen characters. The remainder of the length constraint of 256 is reserved for use by Athena.</p>
    ///   - [`r#type(DataCatalogType)`](crate::client::fluent_builders::CreateDataCatalog::type) / [`set_type(Option<DataCatalogType>)`](crate::client::fluent_builders::CreateDataCatalog::set_type): <p>The type of data catalog to create: <code>LAMBDA</code> for a federated catalog, <code>HIVE</code> for an external hive metastore, or <code>GLUE</code> for an Glue Data Catalog.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateDataCatalog::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateDataCatalog::set_description): <p>A description of the data catalog to be created.</p>
    ///   - [`parameters(HashMap<String, String>)`](crate::client::fluent_builders::CreateDataCatalog::parameters) / [`set_parameters(Option<HashMap<String, String>>)`](crate::client::fluent_builders::CreateDataCatalog::set_parameters): <p>Specifies the Lambda function or functions to use for creating the data catalog. This is a mapping whose values depend on the catalog type. </p>  <ul>   <li> <p>For the <code>HIVE</code> data catalog type, use the following syntax. The <code>metadata-function</code> parameter is required. <code>The sdk-version</code> parameter is optional and defaults to the currently supported version.</p> <p> <code>metadata-function=<i>lambda_arn</i>, sdk-version=<i>version_number</i> </code> </p> </li>   <li> <p>For the <code>LAMBDA</code> data catalog type, use one of the following sets of required parameters, but not both.</p>    <ul>     <li> <p>If you have one Lambda function that processes metadata and another for reading the actual data, use the following syntax. Both parameters are required.</p> <p> <code>metadata-function=<i>lambda_arn</i>, record-function=<i>lambda_arn</i> </code> </p> </li>     <li> <p> If you have a composite Lambda function that processes both metadata and data, use the following syntax to specify your Lambda function.</p> <p> <code>function=<i>lambda_arn</i> </code> </p> </li>    </ul> </li>   <li> <p>The <code>GLUE</code> type takes a catalog ID parameter and is required. The <code> <i>catalog_id</i> </code> is the account ID of the Amazon Web Services account to which the Glue Data Catalog belongs.</p> <p> <code>catalog-id=<i>catalog_id</i> </code> </p>    <ul>     <li> <p>The <code>GLUE</code> data catalog type also applies to the default <code>AwsDataCatalog</code> that already exists in your account, of which you can have only one and cannot modify.</p> </li>     <li> <p>Queries that specify a Glue Data Catalog other than the default <code>AwsDataCatalog</code> must be run on Athena engine version 2.</p> </li>     <li> <p>In Regions where Athena engine version 2 is not available, creating new Glue data catalogs results in an <code>INVALID_INPUT</code> error.</p> </li>    </ul> </li>  </ul>
    ///   - [`tags(Vec<Tag>)`](crate::client::fluent_builders::CreateDataCatalog::tags) / [`set_tags(Option<Vec<Tag>>)`](crate::client::fluent_builders::CreateDataCatalog::set_tags): <p>A list of comma separated tags to add to the data catalog that is created.</p>
    /// - On success, responds with [`CreateDataCatalogOutput`](crate::output::CreateDataCatalogOutput)

    /// - On failure, responds with [`SdkError<CreateDataCatalogError>`](crate::error::CreateDataCatalogError)
    pub fn create_data_catalog(&self) -> fluent_builders::CreateDataCatalog {
        fluent_builders::CreateDataCatalog::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateNamedQuery`](crate::client::fluent_builders::CreateNamedQuery) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::CreateNamedQuery::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::CreateNamedQuery::set_name): <p>The query name.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateNamedQuery::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateNamedQuery::set_description): <p>The query description.</p>
    ///   - [`database(impl Into<String>)`](crate::client::fluent_builders::CreateNamedQuery::database) / [`set_database(Option<String>)`](crate::client::fluent_builders::CreateNamedQuery::set_database): <p>The database to which the query belongs.</p>
    ///   - [`query_string(impl Into<String>)`](crate::client::fluent_builders::CreateNamedQuery::query_string) / [`set_query_string(Option<String>)`](crate::client::fluent_builders::CreateNamedQuery::set_query_string): <p>The contents of the query with all query statements.</p>
    ///   - [`client_request_token(impl Into<String>)`](crate::client::fluent_builders::CreateNamedQuery::client_request_token) / [`set_client_request_token(Option<String>)`](crate::client::fluent_builders::CreateNamedQuery::set_client_request_token): <p>A unique case-sensitive string used to ensure the request to create the query is idempotent (executes only once). If another <code>CreateNamedQuery</code> request is received, the same response is returned and another query is not created. If a parameter has changed, for example, the <code>QueryString</code>, an error is returned.</p> <important>   <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for users. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>  </important>
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::CreateNamedQuery::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::CreateNamedQuery::set_work_group): <p>The name of the workgroup in which the named query is being created.</p>
    /// - On success, responds with [`CreateNamedQueryOutput`](crate::output::CreateNamedQueryOutput) with field(s):
    ///   - [`named_query_id(Option<String>)`](crate::output::CreateNamedQueryOutput::named_query_id): <p>The unique ID of the query.</p>
    /// - On failure, responds with [`SdkError<CreateNamedQueryError>`](crate::error::CreateNamedQueryError)
    pub fn create_named_query(&self) -> fluent_builders::CreateNamedQuery {
        fluent_builders::CreateNamedQuery::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateNotebook`](crate::client::fluent_builders::CreateNotebook) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::CreateNotebook::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::CreateNotebook::set_work_group): <p>The name of the Spark enabled workgroup in which the notebook will be created.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::CreateNotebook::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::CreateNotebook::set_name): <p>The name of the <code>ipynb</code> file to be created in the Spark workgroup, without the <code>.ipynb</code> extension.</p>
    ///   - [`client_request_token(impl Into<String>)`](crate::client::fluent_builders::CreateNotebook::client_request_token) / [`set_client_request_token(Option<String>)`](crate::client::fluent_builders::CreateNotebook::set_client_request_token): <p>A unique case-sensitive string used to ensure the request to create the notebook is idempotent (executes only once).</p> <important>   <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for you. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>  </important>
    /// - On success, responds with [`CreateNotebookOutput`](crate::output::CreateNotebookOutput) with field(s):
    ///   - [`notebook_id(Option<String>)`](crate::output::CreateNotebookOutput::notebook_id): <p>A unique identifier for the notebook.</p>
    /// - On failure, responds with [`SdkError<CreateNotebookError>`](crate::error::CreateNotebookError)
    pub fn create_notebook(&self) -> fluent_builders::CreateNotebook {
        fluent_builders::CreateNotebook::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreatePreparedStatement`](crate::client::fluent_builders::CreatePreparedStatement) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`statement_name(impl Into<String>)`](crate::client::fluent_builders::CreatePreparedStatement::statement_name) / [`set_statement_name(Option<String>)`](crate::client::fluent_builders::CreatePreparedStatement::set_statement_name): <p>The name of the prepared statement.</p>
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::CreatePreparedStatement::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::CreatePreparedStatement::set_work_group): <p>The name of the workgroup to which the prepared statement belongs.</p>
    ///   - [`query_statement(impl Into<String>)`](crate::client::fluent_builders::CreatePreparedStatement::query_statement) / [`set_query_statement(Option<String>)`](crate::client::fluent_builders::CreatePreparedStatement::set_query_statement): <p>The query string for the prepared statement.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreatePreparedStatement::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreatePreparedStatement::set_description): <p>The description of the prepared statement.</p>
    /// - On success, responds with [`CreatePreparedStatementOutput`](crate::output::CreatePreparedStatementOutput)

    /// - On failure, responds with [`SdkError<CreatePreparedStatementError>`](crate::error::CreatePreparedStatementError)
    pub fn create_prepared_statement(&self) -> fluent_builders::CreatePreparedStatement {
        fluent_builders::CreatePreparedStatement::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreatePresignedNotebookUrl`](crate::client::fluent_builders::CreatePresignedNotebookUrl) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`session_id(impl Into<String>)`](crate::client::fluent_builders::CreatePresignedNotebookUrl::session_id) / [`set_session_id(Option<String>)`](crate::client::fluent_builders::CreatePresignedNotebookUrl::set_session_id): <p>The session ID.</p>
    /// - On success, responds with [`CreatePresignedNotebookUrlOutput`](crate::output::CreatePresignedNotebookUrlOutput) with field(s):
    ///   - [`notebook_url(Option<String>)`](crate::output::CreatePresignedNotebookUrlOutput::notebook_url): <p>The URL of the notebook. The URL includes the authentication token and notebook file name and points directly to the opened notebook.</p>
    ///   - [`auth_token(Option<String>)`](crate::output::CreatePresignedNotebookUrlOutput::auth_token): <p>The authentication token for the notebook.</p>
    ///   - [`auth_token_expiration_time(Option<i64>)`](crate::output::CreatePresignedNotebookUrlOutput::auth_token_expiration_time): <p>The UTC epoch time when the authentication token expires.</p>
    /// - On failure, responds with [`SdkError<CreatePresignedNotebookUrlError>`](crate::error::CreatePresignedNotebookUrlError)
    pub fn create_presigned_notebook_url(&self) -> fluent_builders::CreatePresignedNotebookUrl {
        fluent_builders::CreatePresignedNotebookUrl::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateWorkGroup`](crate::client::fluent_builders::CreateWorkGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::CreateWorkGroup::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::CreateWorkGroup::set_name): <p>The workgroup name.</p>
    ///   - [`configuration(WorkGroupConfiguration)`](crate::client::fluent_builders::CreateWorkGroup::configuration) / [`set_configuration(Option<WorkGroupConfiguration>)`](crate::client::fluent_builders::CreateWorkGroup::set_configuration): <p>Contains configuration information for creating an Athena SQL workgroup, which includes the location in Amazon S3 where query results are stored, the encryption configuration, if any, used for encrypting query results, whether the Amazon CloudWatch Metrics are enabled for the workgroup, the limit for the amount of bytes scanned (cutoff) per query, if it is specified, and whether workgroup's settings (specified with <code>EnforceWorkGroupConfiguration</code>) in the <code>WorkGroupConfiguration</code> override client-side settings. See <code>WorkGroupConfiguration$EnforceWorkGroupConfiguration</code>.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateWorkGroup::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateWorkGroup::set_description): <p>The workgroup description.</p>
    ///   - [`tags(Vec<Tag>)`](crate::client::fluent_builders::CreateWorkGroup::tags) / [`set_tags(Option<Vec<Tag>>)`](crate::client::fluent_builders::CreateWorkGroup::set_tags): <p>A list of comma separated tags to add to the workgroup that is created.</p>
    /// - On success, responds with [`CreateWorkGroupOutput`](crate::output::CreateWorkGroupOutput)

    /// - On failure, responds with [`SdkError<CreateWorkGroupError>`](crate::error::CreateWorkGroupError)
    pub fn create_work_group(&self) -> fluent_builders::CreateWorkGroup {
        fluent_builders::CreateWorkGroup::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteDataCatalog`](crate::client::fluent_builders::DeleteDataCatalog) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::DeleteDataCatalog::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::DeleteDataCatalog::set_name): <p>The name of the data catalog to delete.</p>
    /// - On success, responds with [`DeleteDataCatalogOutput`](crate::output::DeleteDataCatalogOutput)

    /// - On failure, responds with [`SdkError<DeleteDataCatalogError>`](crate::error::DeleteDataCatalogError)
    pub fn delete_data_catalog(&self) -> fluent_builders::DeleteDataCatalog {
        fluent_builders::DeleteDataCatalog::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteNamedQuery`](crate::client::fluent_builders::DeleteNamedQuery) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`named_query_id(impl Into<String>)`](crate::client::fluent_builders::DeleteNamedQuery::named_query_id) / [`set_named_query_id(Option<String>)`](crate::client::fluent_builders::DeleteNamedQuery::set_named_query_id): <p>The unique ID of the query to delete.</p>
    /// - On success, responds with [`DeleteNamedQueryOutput`](crate::output::DeleteNamedQueryOutput)

    /// - On failure, responds with [`SdkError<DeleteNamedQueryError>`](crate::error::DeleteNamedQueryError)
    pub fn delete_named_query(&self) -> fluent_builders::DeleteNamedQuery {
        fluent_builders::DeleteNamedQuery::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteNotebook`](crate::client::fluent_builders::DeleteNotebook) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`notebook_id(impl Into<String>)`](crate::client::fluent_builders::DeleteNotebook::notebook_id) / [`set_notebook_id(Option<String>)`](crate::client::fluent_builders::DeleteNotebook::set_notebook_id): <p>The ID of the notebook to delete.</p>
    /// - On success, responds with [`DeleteNotebookOutput`](crate::output::DeleteNotebookOutput)

    /// - On failure, responds with [`SdkError<DeleteNotebookError>`](crate::error::DeleteNotebookError)
    pub fn delete_notebook(&self) -> fluent_builders::DeleteNotebook {
        fluent_builders::DeleteNotebook::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeletePreparedStatement`](crate::client::fluent_builders::DeletePreparedStatement) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`statement_name(impl Into<String>)`](crate::client::fluent_builders::DeletePreparedStatement::statement_name) / [`set_statement_name(Option<String>)`](crate::client::fluent_builders::DeletePreparedStatement::set_statement_name): <p>The name of the prepared statement to delete.</p>
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::DeletePreparedStatement::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::DeletePreparedStatement::set_work_group): <p>The workgroup to which the statement to be deleted belongs.</p>
    /// - On success, responds with [`DeletePreparedStatementOutput`](crate::output::DeletePreparedStatementOutput)

    /// - On failure, responds with [`SdkError<DeletePreparedStatementError>`](crate::error::DeletePreparedStatementError)
    pub fn delete_prepared_statement(&self) -> fluent_builders::DeletePreparedStatement {
        fluent_builders::DeletePreparedStatement::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteWorkGroup`](crate::client::fluent_builders::DeleteWorkGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::DeleteWorkGroup::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::DeleteWorkGroup::set_work_group): <p>The unique name of the workgroup to delete.</p>
    ///   - [`recursive_delete_option(bool)`](crate::client::fluent_builders::DeleteWorkGroup::recursive_delete_option) / [`set_recursive_delete_option(Option<bool>)`](crate::client::fluent_builders::DeleteWorkGroup::set_recursive_delete_option): <p>The option to delete the workgroup and its contents even if the workgroup contains any named queries or query executions.</p>
    /// - On success, responds with [`DeleteWorkGroupOutput`](crate::output::DeleteWorkGroupOutput)

    /// - On failure, responds with [`SdkError<DeleteWorkGroupError>`](crate::error::DeleteWorkGroupError)
    pub fn delete_work_group(&self) -> fluent_builders::DeleteWorkGroup {
        fluent_builders::DeleteWorkGroup::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ExportNotebook`](crate::client::fluent_builders::ExportNotebook) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`notebook_id(impl Into<String>)`](crate::client::fluent_builders::ExportNotebook::notebook_id) / [`set_notebook_id(Option<String>)`](crate::client::fluent_builders::ExportNotebook::set_notebook_id): <p>The ID of the notebook to export.</p>
    /// - On success, responds with [`ExportNotebookOutput`](crate::output::ExportNotebookOutput) with field(s):
    ///   - [`notebook_metadata(Option<NotebookMetadata>)`](crate::output::ExportNotebookOutput::notebook_metadata): <p>The notebook metadata, including notebook ID, notebook name, and workgroup name.</p>
    ///   - [`payload(Option<String>)`](crate::output::ExportNotebookOutput::payload): <p>The content of the exported notebook.</p>
    /// - On failure, responds with [`SdkError<ExportNotebookError>`](crate::error::ExportNotebookError)
    pub fn export_notebook(&self) -> fluent_builders::ExportNotebook {
        fluent_builders::ExportNotebook::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetCalculationExecution`](crate::client::fluent_builders::GetCalculationExecution) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`calculation_execution_id(impl Into<String>)`](crate::client::fluent_builders::GetCalculationExecution::calculation_execution_id) / [`set_calculation_execution_id(Option<String>)`](crate::client::fluent_builders::GetCalculationExecution::set_calculation_execution_id): <p>The calculation execution UUID.</p>
    /// - On success, responds with [`GetCalculationExecutionOutput`](crate::output::GetCalculationExecutionOutput) with field(s):
    ///   - [`calculation_execution_id(Option<String>)`](crate::output::GetCalculationExecutionOutput::calculation_execution_id): <p>The calculation execution UUID.</p>
    ///   - [`session_id(Option<String>)`](crate::output::GetCalculationExecutionOutput::session_id): <p>The session ID that the calculation ran in.</p>
    ///   - [`description(Option<String>)`](crate::output::GetCalculationExecutionOutput::description): <p>The description of the calculation execution.</p>
    ///   - [`working_directory(Option<String>)`](crate::output::GetCalculationExecutionOutput::working_directory): <p>The Amazon S3 location in which calculation results are stored.</p>
    ///   - [`status(Option<CalculationStatus>)`](crate::output::GetCalculationExecutionOutput::status): <p>Contains information about the status of the calculation.</p>
    ///   - [`statistics(Option<CalculationStatistics>)`](crate::output::GetCalculationExecutionOutput::statistics): <p>Contains information about the data processing unit (DPU) execution time and progress. This field is populated only when statistics are available.</p>
    ///   - [`result(Option<CalculationResult>)`](crate::output::GetCalculationExecutionOutput::result): <p>Contains result information. This field is populated only if the calculation is completed.</p>
    /// - On failure, responds with [`SdkError<GetCalculationExecutionError>`](crate::error::GetCalculationExecutionError)
    pub fn get_calculation_execution(&self) -> fluent_builders::GetCalculationExecution {
        fluent_builders::GetCalculationExecution::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetCalculationExecutionCode`](crate::client::fluent_builders::GetCalculationExecutionCode) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`calculation_execution_id(impl Into<String>)`](crate::client::fluent_builders::GetCalculationExecutionCode::calculation_execution_id) / [`set_calculation_execution_id(Option<String>)`](crate::client::fluent_builders::GetCalculationExecutionCode::set_calculation_execution_id): <p>The calculation execution UUID.</p>
    /// - On success, responds with [`GetCalculationExecutionCodeOutput`](crate::output::GetCalculationExecutionCodeOutput) with field(s):
    ///   - [`code_block(Option<String>)`](crate::output::GetCalculationExecutionCodeOutput::code_block): <p>A pre-signed URL to the code that executed the calculation.</p>
    /// - On failure, responds with [`SdkError<GetCalculationExecutionCodeError>`](crate::error::GetCalculationExecutionCodeError)
    pub fn get_calculation_execution_code(&self) -> fluent_builders::GetCalculationExecutionCode {
        fluent_builders::GetCalculationExecutionCode::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetCalculationExecutionStatus`](crate::client::fluent_builders::GetCalculationExecutionStatus) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`calculation_execution_id(impl Into<String>)`](crate::client::fluent_builders::GetCalculationExecutionStatus::calculation_execution_id) / [`set_calculation_execution_id(Option<String>)`](crate::client::fluent_builders::GetCalculationExecutionStatus::set_calculation_execution_id): <p>The calculation execution UUID.</p>
    /// - On success, responds with [`GetCalculationExecutionStatusOutput`](crate::output::GetCalculationExecutionStatusOutput) with field(s):
    ///   - [`status(Option<CalculationStatus>)`](crate::output::GetCalculationExecutionStatusOutput::status): <p>Contains information about the calculation execution status.</p>
    ///   - [`statistics(Option<CalculationStatistics>)`](crate::output::GetCalculationExecutionStatusOutput::statistics): <p>Contains information about the DPU execution time and progress.</p>
    /// - On failure, responds with [`SdkError<GetCalculationExecutionStatusError>`](crate::error::GetCalculationExecutionStatusError)
    pub fn get_calculation_execution_status(
        &self,
    ) -> fluent_builders::GetCalculationExecutionStatus {
        fluent_builders::GetCalculationExecutionStatus::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetDatabase`](crate::client::fluent_builders::GetDatabase) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`catalog_name(impl Into<String>)`](crate::client::fluent_builders::GetDatabase::catalog_name) / [`set_catalog_name(Option<String>)`](crate::client::fluent_builders::GetDatabase::set_catalog_name): <p>The name of the data catalog that contains the database to return.</p>
    ///   - [`database_name(impl Into<String>)`](crate::client::fluent_builders::GetDatabase::database_name) / [`set_database_name(Option<String>)`](crate::client::fluent_builders::GetDatabase::set_database_name): <p>The name of the database to return.</p>
    /// - On success, responds with [`GetDatabaseOutput`](crate::output::GetDatabaseOutput) with field(s):
    ///   - [`database(Option<Database>)`](crate::output::GetDatabaseOutput::database): <p>The database returned.</p>
    /// - On failure, responds with [`SdkError<GetDatabaseError>`](crate::error::GetDatabaseError)
    pub fn get_database(&self) -> fluent_builders::GetDatabase {
        fluent_builders::GetDatabase::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetDataCatalog`](crate::client::fluent_builders::GetDataCatalog) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::GetDataCatalog::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::GetDataCatalog::set_name): <p>The name of the data catalog to return.</p>
    /// - On success, responds with [`GetDataCatalogOutput`](crate::output::GetDataCatalogOutput) with field(s):
    ///   - [`data_catalog(Option<DataCatalog>)`](crate::output::GetDataCatalogOutput::data_catalog): <p>The data catalog returned.</p>
    /// - On failure, responds with [`SdkError<GetDataCatalogError>`](crate::error::GetDataCatalogError)
    pub fn get_data_catalog(&self) -> fluent_builders::GetDataCatalog {
        fluent_builders::GetDataCatalog::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetNamedQuery`](crate::client::fluent_builders::GetNamedQuery) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`named_query_id(impl Into<String>)`](crate::client::fluent_builders::GetNamedQuery::named_query_id) / [`set_named_query_id(Option<String>)`](crate::client::fluent_builders::GetNamedQuery::set_named_query_id): <p>The unique ID of the query. Use <code>ListNamedQueries</code> to get query IDs.</p>
    /// - On success, responds with [`GetNamedQueryOutput`](crate::output::GetNamedQueryOutput) with field(s):
    ///   - [`named_query(Option<NamedQuery>)`](crate::output::GetNamedQueryOutput::named_query): <p>Information about the query.</p>
    /// - On failure, responds with [`SdkError<GetNamedQueryError>`](crate::error::GetNamedQueryError)
    pub fn get_named_query(&self) -> fluent_builders::GetNamedQuery {
        fluent_builders::GetNamedQuery::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetNotebookMetadata`](crate::client::fluent_builders::GetNotebookMetadata) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`notebook_id(impl Into<String>)`](crate::client::fluent_builders::GetNotebookMetadata::notebook_id) / [`set_notebook_id(Option<String>)`](crate::client::fluent_builders::GetNotebookMetadata::set_notebook_id): <p>The ID of the notebook whose metadata is to be retrieved.</p>
    /// - On success, responds with [`GetNotebookMetadataOutput`](crate::output::GetNotebookMetadataOutput) with field(s):
    ///   - [`notebook_metadata(Option<NotebookMetadata>)`](crate::output::GetNotebookMetadataOutput::notebook_metadata): <p>The metadata that is returned for the specified notebook ID.</p>
    /// - On failure, responds with [`SdkError<GetNotebookMetadataError>`](crate::error::GetNotebookMetadataError)
    pub fn get_notebook_metadata(&self) -> fluent_builders::GetNotebookMetadata {
        fluent_builders::GetNotebookMetadata::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetPreparedStatement`](crate::client::fluent_builders::GetPreparedStatement) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`statement_name(impl Into<String>)`](crate::client::fluent_builders::GetPreparedStatement::statement_name) / [`set_statement_name(Option<String>)`](crate::client::fluent_builders::GetPreparedStatement::set_statement_name): <p>The name of the prepared statement to retrieve.</p>
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::GetPreparedStatement::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::GetPreparedStatement::set_work_group): <p>The workgroup to which the statement to be retrieved belongs.</p>
    /// - On success, responds with [`GetPreparedStatementOutput`](crate::output::GetPreparedStatementOutput) with field(s):
    ///   - [`prepared_statement(Option<PreparedStatement>)`](crate::output::GetPreparedStatementOutput::prepared_statement): <p>The name of the prepared statement that was retrieved.</p>
    /// - On failure, responds with [`SdkError<GetPreparedStatementError>`](crate::error::GetPreparedStatementError)
    pub fn get_prepared_statement(&self) -> fluent_builders::GetPreparedStatement {
        fluent_builders::GetPreparedStatement::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetQueryExecution`](crate::client::fluent_builders::GetQueryExecution) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`query_execution_id(impl Into<String>)`](crate::client::fluent_builders::GetQueryExecution::query_execution_id) / [`set_query_execution_id(Option<String>)`](crate::client::fluent_builders::GetQueryExecution::set_query_execution_id): <p>The unique ID of the query execution.</p>
    /// - On success, responds with [`GetQueryExecutionOutput`](crate::output::GetQueryExecutionOutput) with field(s):
    ///   - [`query_execution(Option<QueryExecution>)`](crate::output::GetQueryExecutionOutput::query_execution): <p>Information about the query execution.</p>
    /// - On failure, responds with [`SdkError<GetQueryExecutionError>`](crate::error::GetQueryExecutionError)
    pub fn get_query_execution(&self) -> fluent_builders::GetQueryExecution {
        fluent_builders::GetQueryExecution::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetQueryResults`](crate::client::fluent_builders::GetQueryResults) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetQueryResults::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`query_execution_id(impl Into<String>)`](crate::client::fluent_builders::GetQueryResults::query_execution_id) / [`set_query_execution_id(Option<String>)`](crate::client::fluent_builders::GetQueryResults::set_query_execution_id): <p>The unique ID of the query execution.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetQueryResults::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetQueryResults::set_next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetQueryResults::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetQueryResults::set_max_results): <p>The maximum number of results (rows) to return in this request.</p>
    /// - On success, responds with [`GetQueryResultsOutput`](crate::output::GetQueryResultsOutput) with field(s):
    ///   - [`update_count(Option<i64>)`](crate::output::GetQueryResultsOutput::update_count): <p>The number of rows inserted with a <code>CREATE TABLE AS SELECT</code> statement. </p>
    ///   - [`result_set(Option<ResultSet>)`](crate::output::GetQueryResultsOutput::result_set): <p>The results of the query execution.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetQueryResultsOutput::next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    /// - On failure, responds with [`SdkError<GetQueryResultsError>`](crate::error::GetQueryResultsError)
    pub fn get_query_results(&self) -> fluent_builders::GetQueryResults {
        fluent_builders::GetQueryResults::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetQueryRuntimeStatistics`](crate::client::fluent_builders::GetQueryRuntimeStatistics) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`query_execution_id(impl Into<String>)`](crate::client::fluent_builders::GetQueryRuntimeStatistics::query_execution_id) / [`set_query_execution_id(Option<String>)`](crate::client::fluent_builders::GetQueryRuntimeStatistics::set_query_execution_id): <p>The unique ID of the query execution.</p>
    /// - On success, responds with [`GetQueryRuntimeStatisticsOutput`](crate::output::GetQueryRuntimeStatisticsOutput) with field(s):
    ///   - [`query_runtime_statistics(Option<QueryRuntimeStatistics>)`](crate::output::GetQueryRuntimeStatisticsOutput::query_runtime_statistics): <p>Runtime statistics about the query execution.</p>
    /// - On failure, responds with [`SdkError<GetQueryRuntimeStatisticsError>`](crate::error::GetQueryRuntimeStatisticsError)
    pub fn get_query_runtime_statistics(&self) -> fluent_builders::GetQueryRuntimeStatistics {
        fluent_builders::GetQueryRuntimeStatistics::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetSession`](crate::client::fluent_builders::GetSession) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`session_id(impl Into<String>)`](crate::client::fluent_builders::GetSession::session_id) / [`set_session_id(Option<String>)`](crate::client::fluent_builders::GetSession::set_session_id): <p>The session ID.</p>
    /// - On success, responds with [`GetSessionOutput`](crate::output::GetSessionOutput) with field(s):
    ///   - [`session_id(Option<String>)`](crate::output::GetSessionOutput::session_id): <p>The session ID.</p>
    ///   - [`description(Option<String>)`](crate::output::GetSessionOutput::description): <p>The session description.</p>
    ///   - [`work_group(Option<String>)`](crate::output::GetSessionOutput::work_group): <p>The workgroup to which the session belongs.</p>
    ///   - [`engine_version(Option<String>)`](crate::output::GetSessionOutput::engine_version): <p>The engine version used by the session (for example, <code>PySpark engine version 3</code>). You can get a list of engine versions by calling <code>ListEngineVersions</code>.</p>
    ///   - [`engine_configuration(Option<EngineConfiguration>)`](crate::output::GetSessionOutput::engine_configuration): <p>Contains engine configuration information like DPU usage.</p>
    ///   - [`notebook_version(Option<String>)`](crate::output::GetSessionOutput::notebook_version): <p>The notebook version.</p>
    ///   - [`session_configuration(Option<SessionConfiguration>)`](crate::output::GetSessionOutput::session_configuration): <p>Contains the workgroup configuration information used by the session.</p>
    ///   - [`status(Option<SessionStatus>)`](crate::output::GetSessionOutput::status): <p>Contains information about the status of the session.</p>
    ///   - [`statistics(Option<SessionStatistics>)`](crate::output::GetSessionOutput::statistics): <p>Contains the DPU execution time.</p>
    /// - On failure, responds with [`SdkError<GetSessionError>`](crate::error::GetSessionError)
    pub fn get_session(&self) -> fluent_builders::GetSession {
        fluent_builders::GetSession::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetSessionStatus`](crate::client::fluent_builders::GetSessionStatus) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`session_id(impl Into<String>)`](crate::client::fluent_builders::GetSessionStatus::session_id) / [`set_session_id(Option<String>)`](crate::client::fluent_builders::GetSessionStatus::set_session_id): <p>The session ID.</p>
    /// - On success, responds with [`GetSessionStatusOutput`](crate::output::GetSessionStatusOutput) with field(s):
    ///   - [`session_id(Option<String>)`](crate::output::GetSessionStatusOutput::session_id): <p>The session ID.</p>
    ///   - [`status(Option<SessionStatus>)`](crate::output::GetSessionStatusOutput::status): <p>Contains information about the status of the session.</p>
    /// - On failure, responds with [`SdkError<GetSessionStatusError>`](crate::error::GetSessionStatusError)
    pub fn get_session_status(&self) -> fluent_builders::GetSessionStatus {
        fluent_builders::GetSessionStatus::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetTableMetadata`](crate::client::fluent_builders::GetTableMetadata) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`catalog_name(impl Into<String>)`](crate::client::fluent_builders::GetTableMetadata::catalog_name) / [`set_catalog_name(Option<String>)`](crate::client::fluent_builders::GetTableMetadata::set_catalog_name): <p>The name of the data catalog that contains the database and table metadata to return.</p>
    ///   - [`database_name(impl Into<String>)`](crate::client::fluent_builders::GetTableMetadata::database_name) / [`set_database_name(Option<String>)`](crate::client::fluent_builders::GetTableMetadata::set_database_name): <p>The name of the database that contains the table metadata to return.</p>
    ///   - [`table_name(impl Into<String>)`](crate::client::fluent_builders::GetTableMetadata::table_name) / [`set_table_name(Option<String>)`](crate::client::fluent_builders::GetTableMetadata::set_table_name): <p>The name of the table for which metadata is returned.</p>
    /// - On success, responds with [`GetTableMetadataOutput`](crate::output::GetTableMetadataOutput) with field(s):
    ///   - [`table_metadata(Option<TableMetadata>)`](crate::output::GetTableMetadataOutput::table_metadata): <p>An object that contains table metadata.</p>
    /// - On failure, responds with [`SdkError<GetTableMetadataError>`](crate::error::GetTableMetadataError)
    pub fn get_table_metadata(&self) -> fluent_builders::GetTableMetadata {
        fluent_builders::GetTableMetadata::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetWorkGroup`](crate::client::fluent_builders::GetWorkGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::GetWorkGroup::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::GetWorkGroup::set_work_group): <p>The name of the workgroup.</p>
    /// - On success, responds with [`GetWorkGroupOutput`](crate::output::GetWorkGroupOutput) with field(s):
    ///   - [`work_group(Option<WorkGroup>)`](crate::output::GetWorkGroupOutput::work_group): <p>Information about the workgroup.</p>
    /// - On failure, responds with [`SdkError<GetWorkGroupError>`](crate::error::GetWorkGroupError)
    pub fn get_work_group(&self) -> fluent_builders::GetWorkGroup {
        fluent_builders::GetWorkGroup::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ImportNotebook`](crate::client::fluent_builders::ImportNotebook) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::ImportNotebook::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::ImportNotebook::set_work_group): <p>The name of the Spark enabled workgroup to import the notebook to.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::ImportNotebook::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::ImportNotebook::set_name): <p>The name of the notebook to import.</p>
    ///   - [`payload(impl Into<String>)`](crate::client::fluent_builders::ImportNotebook::payload) / [`set_payload(Option<String>)`](crate::client::fluent_builders::ImportNotebook::set_payload): <p>The notebook content to be imported.</p>
    ///   - [`r#type(NotebookType)`](crate::client::fluent_builders::ImportNotebook::type) / [`set_type(Option<NotebookType>)`](crate::client::fluent_builders::ImportNotebook::set_type): <p>The notebook content type. Currently, the only valid type is <code>IPYNB</code>.</p>
    ///   - [`client_request_token(impl Into<String>)`](crate::client::fluent_builders::ImportNotebook::client_request_token) / [`set_client_request_token(Option<String>)`](crate::client::fluent_builders::ImportNotebook::set_client_request_token): <p>A unique case-sensitive string used to ensure the request to import the notebook is idempotent (executes only once).</p> <important>   <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for you. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>  </important>
    /// - On success, responds with [`ImportNotebookOutput`](crate::output::ImportNotebookOutput) with field(s):
    ///   - [`notebook_id(Option<String>)`](crate::output::ImportNotebookOutput::notebook_id): <p>The ID of the notebook to import.</p>
    /// - On failure, responds with [`SdkError<ImportNotebookError>`](crate::error::ImportNotebookError)
    pub fn import_notebook(&self) -> fluent_builders::ImportNotebook {
        fluent_builders::ImportNotebook::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListApplicationDPUSizes`](crate::client::fluent_builders::ListApplicationDPUSizes) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListApplicationDPUSizes::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListApplicationDPUSizes::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListApplicationDPUSizes::set_max_results): <p>Specifies the maximum number of results to return.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListApplicationDPUSizes::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListApplicationDPUSizes::set_next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated.</p>
    /// - On success, responds with [`ListApplicationDpuSizesOutput`](crate::output::ListApplicationDpuSizesOutput) with field(s):
    ///   - [`application_dpu_sizes(Option<Vec<ApplicationDpuSizes>>)`](crate::output::ListApplicationDpuSizesOutput::application_dpu_sizes): <p>A list of the supported DPU sizes that the application runtime supports.</p>
    ///   - [`next_token(Option<String>)`](crate::output::ListApplicationDpuSizesOutput::next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    /// - On failure, responds with [`SdkError<ListApplicationDPUSizesError>`](crate::error::ListApplicationDPUSizesError)
    pub fn list_application_dpu_sizes(&self) -> fluent_builders::ListApplicationDPUSizes {
        fluent_builders::ListApplicationDPUSizes::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListCalculationExecutions`](crate::client::fluent_builders::ListCalculationExecutions) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListCalculationExecutions::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`session_id(impl Into<String>)`](crate::client::fluent_builders::ListCalculationExecutions::session_id) / [`set_session_id(Option<String>)`](crate::client::fluent_builders::ListCalculationExecutions::set_session_id): <p>The session ID.</p>
    ///   - [`state_filter(CalculationExecutionState)`](crate::client::fluent_builders::ListCalculationExecutions::state_filter) / [`set_state_filter(Option<CalculationExecutionState>)`](crate::client::fluent_builders::ListCalculationExecutions::set_state_filter): <p>A filter for a specific calculation execution state. A description of each state follows.</p>  <p> <code>CREATING</code> - The calculation is in the process of being created.</p>  <p> <code>CREATED</code> - The calculation has been created and is ready to run.</p>  <p> <code>QUEUED</code> - The calculation has been queued for processing.</p>  <p> <code>RUNNING</code> - The calculation is running.</p>  <p> <code>CANCELING</code> - A request to cancel the calculation has been received and the system is working to stop it.</p>  <p> <code>CANCELED</code> - The calculation is no longer running as the result of a cancel request.</p>  <p> <code>COMPLETED</code> - The calculation has completed without error.</p>  <p> <code>FAILED</code> - The calculation failed and is no longer running.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListCalculationExecutions::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListCalculationExecutions::set_max_results): <p>The maximum number of calculation executions to return.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListCalculationExecutions::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListCalculationExecutions::set_next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    /// - On success, responds with [`ListCalculationExecutionsOutput`](crate::output::ListCalculationExecutionsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::ListCalculationExecutionsOutput::next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    ///   - [`calculations(Option<Vec<CalculationSummary>>)`](crate::output::ListCalculationExecutionsOutput::calculations): <p>A list of <code>CalculationSummary</code> objects.</p>
    /// - On failure, responds with [`SdkError<ListCalculationExecutionsError>`](crate::error::ListCalculationExecutionsError)
    pub fn list_calculation_executions(&self) -> fluent_builders::ListCalculationExecutions {
        fluent_builders::ListCalculationExecutions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListDatabases`](crate::client::fluent_builders::ListDatabases) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListDatabases::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`catalog_name(impl Into<String>)`](crate::client::fluent_builders::ListDatabases::catalog_name) / [`set_catalog_name(Option<String>)`](crate::client::fluent_builders::ListDatabases::set_catalog_name): <p>The name of the data catalog that contains the databases to return.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListDatabases::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListDatabases::set_next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListDatabases::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListDatabases::set_max_results): <p>Specifies the maximum number of results to return.</p>
    /// - On success, responds with [`ListDatabasesOutput`](crate::output::ListDatabasesOutput) with field(s):
    ///   - [`database_list(Option<Vec<Database>>)`](crate::output::ListDatabasesOutput::database_list): <p>A list of databases from a data catalog.</p>
    ///   - [`next_token(Option<String>)`](crate::output::ListDatabasesOutput::next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the NextToken from the response object of the previous page call.</p>
    /// - On failure, responds with [`SdkError<ListDatabasesError>`](crate::error::ListDatabasesError)
    pub fn list_databases(&self) -> fluent_builders::ListDatabases {
        fluent_builders::ListDatabases::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListDataCatalogs`](crate::client::fluent_builders::ListDataCatalogs) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListDataCatalogs::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListDataCatalogs::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListDataCatalogs::set_next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the NextToken from the response object of the previous page call.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListDataCatalogs::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListDataCatalogs::set_max_results): <p>Specifies the maximum number of data catalogs to return.</p>
    /// - On success, responds with [`ListDataCatalogsOutput`](crate::output::ListDataCatalogsOutput) with field(s):
    ///   - [`data_catalogs_summary(Option<Vec<DataCatalogSummary>>)`](crate::output::ListDataCatalogsOutput::data_catalogs_summary): <p>A summary list of data catalogs.</p>
    ///   - [`next_token(Option<String>)`](crate::output::ListDataCatalogsOutput::next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the NextToken from the response object of the previous page call.</p>
    /// - On failure, responds with [`SdkError<ListDataCatalogsError>`](crate::error::ListDataCatalogsError)
    pub fn list_data_catalogs(&self) -> fluent_builders::ListDataCatalogs {
        fluent_builders::ListDataCatalogs::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListEngineVersions`](crate::client::fluent_builders::ListEngineVersions) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListEngineVersions::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListEngineVersions::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListEngineVersions::set_next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListEngineVersions::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListEngineVersions::set_max_results): <p>The maximum number of engine versions to return in this request.</p>
    /// - On success, responds with [`ListEngineVersionsOutput`](crate::output::ListEngineVersionsOutput) with field(s):
    ///   - [`engine_versions(Option<Vec<EngineVersion>>)`](crate::output::ListEngineVersionsOutput::engine_versions): <p>A list of engine versions that are available to choose from.</p>
    ///   - [`next_token(Option<String>)`](crate::output::ListEngineVersionsOutput::next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    /// - On failure, responds with [`SdkError<ListEngineVersionsError>`](crate::error::ListEngineVersionsError)
    pub fn list_engine_versions(&self) -> fluent_builders::ListEngineVersions {
        fluent_builders::ListEngineVersions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListExecutors`](crate::client::fluent_builders::ListExecutors) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListExecutors::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`session_id(impl Into<String>)`](crate::client::fluent_builders::ListExecutors::session_id) / [`set_session_id(Option<String>)`](crate::client::fluent_builders::ListExecutors::set_session_id): <p>The session ID.</p>
    ///   - [`executor_state_filter(ExecutorState)`](crate::client::fluent_builders::ListExecutors::executor_state_filter) / [`set_executor_state_filter(Option<ExecutorState>)`](crate::client::fluent_builders::ListExecutors::set_executor_state_filter): <p>A filter for a specific executor state. A description of each state follows.</p>  <p> <code>CREATING</code> - The executor is being started, including acquiring resources.</p>  <p> <code>CREATED</code> - The executor has been started.</p>  <p> <code>REGISTERED</code> - The executor has been registered.</p>  <p> <code>TERMINATING</code> - The executor is in the process of shutting down.</p>  <p> <code>TERMINATED</code> - The executor is no longer running.</p>  <p> <code>FAILED</code> - Due to a failure, the executor is no longer running.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListExecutors::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListExecutors::set_max_results): <p>The maximum number of executors to return.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListExecutors::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListExecutors::set_next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    /// - On success, responds with [`ListExecutorsOutput`](crate::output::ListExecutorsOutput) with field(s):
    ///   - [`session_id(Option<String>)`](crate::output::ListExecutorsOutput::session_id): <p>The session ID.</p>
    ///   - [`next_token(Option<String>)`](crate::output::ListExecutorsOutput::next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    ///   - [`executors_summary(Option<Vec<ExecutorsSummary>>)`](crate::output::ListExecutorsOutput::executors_summary): <p>Contains summary information about the executor.</p>
    /// - On failure, responds with [`SdkError<ListExecutorsError>`](crate::error::ListExecutorsError)
    pub fn list_executors(&self) -> fluent_builders::ListExecutors {
        fluent_builders::ListExecutors::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListNamedQueries`](crate::client::fluent_builders::ListNamedQueries) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListNamedQueries::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListNamedQueries::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListNamedQueries::set_next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListNamedQueries::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListNamedQueries::set_max_results): <p>The maximum number of queries to return in this request.</p>
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::ListNamedQueries::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::ListNamedQueries::set_work_group): <p>The name of the workgroup from which the named queries are being returned. If a workgroup is not specified, the saved queries for the primary workgroup are returned.</p>
    /// - On success, responds with [`ListNamedQueriesOutput`](crate::output::ListNamedQueriesOutput) with field(s):
    ///   - [`named_query_ids(Option<Vec<String>>)`](crate::output::ListNamedQueriesOutput::named_query_ids): <p>The list of unique query IDs.</p>
    ///   - [`next_token(Option<String>)`](crate::output::ListNamedQueriesOutput::next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    /// - On failure, responds with [`SdkError<ListNamedQueriesError>`](crate::error::ListNamedQueriesError)
    pub fn list_named_queries(&self) -> fluent_builders::ListNamedQueries {
        fluent_builders::ListNamedQueries::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListNotebookMetadata`](crate::client::fluent_builders::ListNotebookMetadata) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(FilterDefinition)`](crate::client::fluent_builders::ListNotebookMetadata::filters) / [`set_filters(Option<FilterDefinition>)`](crate::client::fluent_builders::ListNotebookMetadata::set_filters): <p>Search filter string.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListNotebookMetadata::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListNotebookMetadata::set_next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListNotebookMetadata::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListNotebookMetadata::set_max_results): <p>Specifies the maximum number of results to return.</p>
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::ListNotebookMetadata::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::ListNotebookMetadata::set_work_group): <p>The name of the Spark enabled workgroup to retrieve notebook metadata for.</p>
    /// - On success, responds with [`ListNotebookMetadataOutput`](crate::output::ListNotebookMetadataOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::ListNotebookMetadataOutput::next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    ///   - [`notebook_metadata_list(Option<Vec<NotebookMetadata>>)`](crate::output::ListNotebookMetadataOutput::notebook_metadata_list): <p>The list of notebook metadata for the specified workgroup.</p>
    /// - On failure, responds with [`SdkError<ListNotebookMetadataError>`](crate::error::ListNotebookMetadataError)
    pub fn list_notebook_metadata(&self) -> fluent_builders::ListNotebookMetadata {
        fluent_builders::ListNotebookMetadata::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListNotebookSessions`](crate::client::fluent_builders::ListNotebookSessions) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`notebook_id(impl Into<String>)`](crate::client::fluent_builders::ListNotebookSessions::notebook_id) / [`set_notebook_id(Option<String>)`](crate::client::fluent_builders::ListNotebookSessions::set_notebook_id): <p>The ID of the notebook to list sessions for.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListNotebookSessions::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListNotebookSessions::set_max_results): <p>The maximum number of notebook sessions to return.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListNotebookSessions::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListNotebookSessions::set_next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    /// - On success, responds with [`ListNotebookSessionsOutput`](crate::output::ListNotebookSessionsOutput) with field(s):
    ///   - [`notebook_sessions_list(Option<Vec<NotebookSessionSummary>>)`](crate::output::ListNotebookSessionsOutput::notebook_sessions_list): <p>A list of the sessions belonging to the notebook.</p>
    ///   - [`next_token(Option<String>)`](crate::output::ListNotebookSessionsOutput::next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    /// - On failure, responds with [`SdkError<ListNotebookSessionsError>`](crate::error::ListNotebookSessionsError)
    pub fn list_notebook_sessions(&self) -> fluent_builders::ListNotebookSessions {
        fluent_builders::ListNotebookSessions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListPreparedStatements`](crate::client::fluent_builders::ListPreparedStatements) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListPreparedStatements::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::ListPreparedStatements::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::ListPreparedStatements::set_work_group): <p>The workgroup to list the prepared statements for.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListPreparedStatements::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListPreparedStatements::set_next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListPreparedStatements::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListPreparedStatements::set_max_results): <p>The maximum number of results to return in this request.</p>
    /// - On success, responds with [`ListPreparedStatementsOutput`](crate::output::ListPreparedStatementsOutput) with field(s):
    ///   - [`prepared_statements(Option<Vec<PreparedStatementSummary>>)`](crate::output::ListPreparedStatementsOutput::prepared_statements): <p>The list of prepared statements for the workgroup.</p>
    ///   - [`next_token(Option<String>)`](crate::output::ListPreparedStatementsOutput::next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    /// - On failure, responds with [`SdkError<ListPreparedStatementsError>`](crate::error::ListPreparedStatementsError)
    pub fn list_prepared_statements(&self) -> fluent_builders::ListPreparedStatements {
        fluent_builders::ListPreparedStatements::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListQueryExecutions`](crate::client::fluent_builders::ListQueryExecutions) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListQueryExecutions::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListQueryExecutions::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListQueryExecutions::set_next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListQueryExecutions::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListQueryExecutions::set_max_results): <p>The maximum number of query executions to return in this request.</p>
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::ListQueryExecutions::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::ListQueryExecutions::set_work_group): <p>The name of the workgroup from which queries are being returned. If a workgroup is not specified, a list of available query execution IDs for the queries in the primary workgroup is returned.</p>
    /// - On success, responds with [`ListQueryExecutionsOutput`](crate::output::ListQueryExecutionsOutput) with field(s):
    ///   - [`query_execution_ids(Option<Vec<String>>)`](crate::output::ListQueryExecutionsOutput::query_execution_ids): <p>The unique IDs of each query execution as an array of strings.</p>
    ///   - [`next_token(Option<String>)`](crate::output::ListQueryExecutionsOutput::next_token): <p>A token to be used by the next request if this request is truncated.</p>
    /// - On failure, responds with [`SdkError<ListQueryExecutionsError>`](crate::error::ListQueryExecutionsError)
    pub fn list_query_executions(&self) -> fluent_builders::ListQueryExecutions {
        fluent_builders::ListQueryExecutions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListSessions`](crate::client::fluent_builders::ListSessions) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListSessions::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::ListSessions::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::ListSessions::set_work_group): <p>The workgroup to which the session belongs.</p>
    ///   - [`state_filter(SessionState)`](crate::client::fluent_builders::ListSessions::state_filter) / [`set_state_filter(Option<SessionState>)`](crate::client::fluent_builders::ListSessions::set_state_filter): <p>A filter for a specific session state. A description of each state follows.</p>  <p> <code>CREATING</code> - The session is being started, including acquiring resources.</p>  <p> <code>CREATED</code> - The session has been started.</p>  <p> <code>IDLE</code> - The session is able to accept a calculation.</p>  <p> <code>BUSY</code> - The session is processing another task and is unable to accept a calculation.</p>  <p> <code>TERMINATING</code> - The session is in the process of shutting down.</p>  <p> <code>TERMINATED</code> - The session and its resources are no longer running.</p>  <p> <code>DEGRADED</code> - The session has no healthy coordinators.</p>  <p> <code>FAILED</code> - Due to a failure, the session and its resources are no longer running.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListSessions::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListSessions::set_max_results): <p>The maximum number of sessions to return.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListSessions::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListSessions::set_next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    /// - On success, responds with [`ListSessionsOutput`](crate::output::ListSessionsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::ListSessionsOutput::next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    ///   - [`sessions(Option<Vec<SessionSummary>>)`](crate::output::ListSessionsOutput::sessions): <p>A list of sessions.</p>
    /// - On failure, responds with [`SdkError<ListSessionsError>`](crate::error::ListSessionsError)
    pub fn list_sessions(&self) -> fluent_builders::ListSessions {
        fluent_builders::ListSessions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListTableMetadata`](crate::client::fluent_builders::ListTableMetadata) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListTableMetadata::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`catalog_name(impl Into<String>)`](crate::client::fluent_builders::ListTableMetadata::catalog_name) / [`set_catalog_name(Option<String>)`](crate::client::fluent_builders::ListTableMetadata::set_catalog_name): <p>The name of the data catalog for which table metadata should be returned.</p>
    ///   - [`database_name(impl Into<String>)`](crate::client::fluent_builders::ListTableMetadata::database_name) / [`set_database_name(Option<String>)`](crate::client::fluent_builders::ListTableMetadata::set_database_name): <p>The name of the database for which table metadata should be returned.</p>
    ///   - [`expression(impl Into<String>)`](crate::client::fluent_builders::ListTableMetadata::expression) / [`set_expression(Option<String>)`](crate::client::fluent_builders::ListTableMetadata::set_expression): <p>A regex filter that pattern-matches table names. If no expression is supplied, metadata for all tables are listed.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListTableMetadata::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListTableMetadata::set_next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the NextToken from the response object of the previous page call.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListTableMetadata::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListTableMetadata::set_max_results): <p>Specifies the maximum number of results to return.</p>
    /// - On success, responds with [`ListTableMetadataOutput`](crate::output::ListTableMetadataOutput) with field(s):
    ///   - [`table_metadata_list(Option<Vec<TableMetadata>>)`](crate::output::ListTableMetadataOutput::table_metadata_list): <p>A list of table metadata.</p>
    ///   - [`next_token(Option<String>)`](crate::output::ListTableMetadataOutput::next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the NextToken from the response object of the previous page call.</p>
    /// - On failure, responds with [`SdkError<ListTableMetadataError>`](crate::error::ListTableMetadataError)
    pub fn list_table_metadata(&self) -> fluent_builders::ListTableMetadata {
        fluent_builders::ListTableMetadata::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListTagsForResource`](crate::client::fluent_builders::ListTagsForResource) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListTagsForResource::into_paginator).
    ///
    /// - 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>Lists the tags for the resource with the specified ARN.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListTagsForResource::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListTagsForResource::set_next_token): <p>The token for the next set of results, or null if there are no additional results for this request, where the request lists the tags for the resource with the specified ARN.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListTagsForResource::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListTagsForResource::set_max_results): <p>The maximum number of results to be returned per request that lists the tags for the resource.</p>
    /// - On success, responds with [`ListTagsForResourceOutput`](crate::output::ListTagsForResourceOutput) with field(s):
    ///   - [`tags(Option<Vec<Tag>>)`](crate::output::ListTagsForResourceOutput::tags): <p>The list of tags associated with the specified resource.</p>
    ///   - [`next_token(Option<String>)`](crate::output::ListTagsForResourceOutput::next_token): <p>A token to be used by the next request if this request is truncated.</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 [`ListWorkGroups`](crate::client::fluent_builders::ListWorkGroups) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListWorkGroups::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListWorkGroups::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListWorkGroups::set_next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListWorkGroups::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListWorkGroups::set_max_results): <p>The maximum number of workgroups to return in this request.</p>
    /// - On success, responds with [`ListWorkGroupsOutput`](crate::output::ListWorkGroupsOutput) with field(s):
    ///   - [`work_groups(Option<Vec<WorkGroupSummary>>)`](crate::output::ListWorkGroupsOutput::work_groups): <p>A list of <code>WorkGroupSummary</code> objects that include the names, descriptions, creation times, and states for each workgroup.</p>
    ///   - [`next_token(Option<String>)`](crate::output::ListWorkGroupsOutput::next_token): <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
    /// - On failure, responds with [`SdkError<ListWorkGroupsError>`](crate::error::ListWorkGroupsError)
    pub fn list_work_groups(&self) -> fluent_builders::ListWorkGroups {
        fluent_builders::ListWorkGroups::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`StartCalculationExecution`](crate::client::fluent_builders::StartCalculationExecution) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`session_id(impl Into<String>)`](crate::client::fluent_builders::StartCalculationExecution::session_id) / [`set_session_id(Option<String>)`](crate::client::fluent_builders::StartCalculationExecution::set_session_id): <p>The session ID.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::StartCalculationExecution::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::StartCalculationExecution::set_description): <p>A description of the calculation.</p>
    ///   - [`calculation_configuration(CalculationConfiguration)`](crate::client::fluent_builders::StartCalculationExecution::calculation_configuration) / [`set_calculation_configuration(Option<CalculationConfiguration>)`](crate::client::fluent_builders::StartCalculationExecution::set_calculation_configuration): <p>Contains configuration information for the calculation.</p>
    ///   - [`code_block(impl Into<String>)`](crate::client::fluent_builders::StartCalculationExecution::code_block) / [`set_code_block(Option<String>)`](crate::client::fluent_builders::StartCalculationExecution::set_code_block): <p>A string that contains the code of the calculation.</p>
    ///   - [`client_request_token(impl Into<String>)`](crate::client::fluent_builders::StartCalculationExecution::client_request_token) / [`set_client_request_token(Option<String>)`](crate::client::fluent_builders::StartCalculationExecution::set_client_request_token): <p>A unique case-sensitive string used to ensure the request to create the calculation is idempotent (executes only once). If another <code>StartCalculationExecutionRequest</code> is received, the same response is returned and another calculation is not created. If a parameter has changed, an error is returned.</p> <important>   <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for users. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>  </important>
    /// - On success, responds with [`StartCalculationExecutionOutput`](crate::output::StartCalculationExecutionOutput) with field(s):
    ///   - [`calculation_execution_id(Option<String>)`](crate::output::StartCalculationExecutionOutput::calculation_execution_id): <p>The calculation execution UUID.</p>
    ///   - [`state(Option<CalculationExecutionState>)`](crate::output::StartCalculationExecutionOutput::state): <p> <code>CREATING</code> - The calculation is in the process of being created.</p>  <p> <code>CREATED</code> - The calculation has been created and is ready to run.</p>  <p> <code>QUEUED</code> - The calculation has been queued for processing.</p>  <p> <code>RUNNING</code> - The calculation is running.</p>  <p> <code>CANCELING</code> - A request to cancel the calculation has been received and the system is working to stop it.</p>  <p> <code>CANCELED</code> - The calculation is no longer running as the result of a cancel request.</p>  <p> <code>COMPLETED</code> - The calculation has completed without error.</p>  <p> <code>FAILED</code> - The calculation failed and is no longer running.</p>
    /// - On failure, responds with [`SdkError<StartCalculationExecutionError>`](crate::error::StartCalculationExecutionError)
    pub fn start_calculation_execution(&self) -> fluent_builders::StartCalculationExecution {
        fluent_builders::StartCalculationExecution::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`StartQueryExecution`](crate::client::fluent_builders::StartQueryExecution) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`query_string(impl Into<String>)`](crate::client::fluent_builders::StartQueryExecution::query_string) / [`set_query_string(Option<String>)`](crate::client::fluent_builders::StartQueryExecution::set_query_string): <p>The SQL query statements to be executed.</p>
    ///   - [`client_request_token(impl Into<String>)`](crate::client::fluent_builders::StartQueryExecution::client_request_token) / [`set_client_request_token(Option<String>)`](crate::client::fluent_builders::StartQueryExecution::set_client_request_token): <p>A unique case-sensitive string used to ensure the request to create the query is idempotent (executes only once). If another <code>StartQueryExecution</code> request is received, the same response is returned and another query is not created. If a parameter has changed, for example, the <code>QueryString</code>, an error is returned.</p> <important>   <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for users. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>  </important>
    ///   - [`query_execution_context(QueryExecutionContext)`](crate::client::fluent_builders::StartQueryExecution::query_execution_context) / [`set_query_execution_context(Option<QueryExecutionContext>)`](crate::client::fluent_builders::StartQueryExecution::set_query_execution_context): <p>The database within which the query executes.</p>
    ///   - [`result_configuration(ResultConfiguration)`](crate::client::fluent_builders::StartQueryExecution::result_configuration) / [`set_result_configuration(Option<ResultConfiguration>)`](crate::client::fluent_builders::StartQueryExecution::set_result_configuration): <p>Specifies information about where and how to save the results of the query execution. If the query runs in a workgroup, then workgroup's settings may override query settings. This affects the query results location. The workgroup settings override is specified in EnforceWorkGroupConfiguration (true/false) in the WorkGroupConfiguration. See <code>WorkGroupConfiguration$EnforceWorkGroupConfiguration</code>.</p>
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::StartQueryExecution::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::StartQueryExecution::set_work_group): <p>The name of the workgroup in which the query is being started.</p>
    ///   - [`execution_parameters(Vec<String>)`](crate::client::fluent_builders::StartQueryExecution::execution_parameters) / [`set_execution_parameters(Option<Vec<String>>)`](crate::client::fluent_builders::StartQueryExecution::set_execution_parameters): <p>A list of values for the parameters in a query. The values are applied sequentially to the parameters in the query in the order in which the parameters occur.</p>
    ///   - [`result_reuse_configuration(ResultReuseConfiguration)`](crate::client::fluent_builders::StartQueryExecution::result_reuse_configuration) / [`set_result_reuse_configuration(Option<ResultReuseConfiguration>)`](crate::client::fluent_builders::StartQueryExecution::set_result_reuse_configuration): <p>Specifies the query result reuse behavior for the query.</p>
    /// - On success, responds with [`StartQueryExecutionOutput`](crate::output::StartQueryExecutionOutput) with field(s):
    ///   - [`query_execution_id(Option<String>)`](crate::output::StartQueryExecutionOutput::query_execution_id): <p>The unique ID of the query that ran as a result of this request.</p>
    /// - On failure, responds with [`SdkError<StartQueryExecutionError>`](crate::error::StartQueryExecutionError)
    pub fn start_query_execution(&self) -> fluent_builders::StartQueryExecution {
        fluent_builders::StartQueryExecution::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`StartSession`](crate::client::fluent_builders::StartSession) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::StartSession::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::StartSession::set_description): <p>The session description.</p>
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::StartSession::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::StartSession::set_work_group): <p>The workgroup to which the session belongs.</p>
    ///   - [`engine_configuration(EngineConfiguration)`](crate::client::fluent_builders::StartSession::engine_configuration) / [`set_engine_configuration(Option<EngineConfiguration>)`](crate::client::fluent_builders::StartSession::set_engine_configuration): <p>Contains engine data processing unit (DPU) configuration settings and parameter mappings.</p>
    ///   - [`notebook_version(impl Into<String>)`](crate::client::fluent_builders::StartSession::notebook_version) / [`set_notebook_version(Option<String>)`](crate::client::fluent_builders::StartSession::set_notebook_version): <p>The notebook version. This value is required only when requesting that a notebook server be started for the session. The only valid notebook version is <code>Jupyter1.0</code>.</p>
    ///   - [`session_idle_timeout_in_minutes(i32)`](crate::client::fluent_builders::StartSession::session_idle_timeout_in_minutes) / [`set_session_idle_timeout_in_minutes(Option<i32>)`](crate::client::fluent_builders::StartSession::set_session_idle_timeout_in_minutes): <p>The idle timeout in minutes for the session.</p>
    ///   - [`client_request_token(impl Into<String>)`](crate::client::fluent_builders::StartSession::client_request_token) / [`set_client_request_token(Option<String>)`](crate::client::fluent_builders::StartSession::set_client_request_token): <p>A unique case-sensitive string used to ensure the request to create the session is idempotent (executes only once). If another <code>StartSessionRequest</code> is received, the same response is returned and another session is not created. If a parameter has changed, an error is returned.</p> <important>   <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for users. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>  </important>
    /// - On success, responds with [`StartSessionOutput`](crate::output::StartSessionOutput) with field(s):
    ///   - [`session_id(Option<String>)`](crate::output::StartSessionOutput::session_id): <p>The session ID.</p>
    ///   - [`state(Option<SessionState>)`](crate::output::StartSessionOutput::state): <p>The state of the session. A description of each state follows.</p>  <p> <code>CREATING</code> - The session is being started, including acquiring resources.</p>  <p> <code>CREATED</code> - The session has been started.</p>  <p> <code>IDLE</code> - The session is able to accept a calculation.</p>  <p> <code>BUSY</code> - The session is processing another task and is unable to accept a calculation.</p>  <p> <code>TERMINATING</code> - The session is in the process of shutting down.</p>  <p> <code>TERMINATED</code> - The session and its resources are no longer running.</p>  <p> <code>DEGRADED</code> - The session has no healthy coordinators.</p>  <p> <code>FAILED</code> - Due to a failure, the session and its resources are no longer running.</p>
    /// - On failure, responds with [`SdkError<StartSessionError>`](crate::error::StartSessionError)
    pub fn start_session(&self) -> fluent_builders::StartSession {
        fluent_builders::StartSession::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`StopCalculationExecution`](crate::client::fluent_builders::StopCalculationExecution) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`calculation_execution_id(impl Into<String>)`](crate::client::fluent_builders::StopCalculationExecution::calculation_execution_id) / [`set_calculation_execution_id(Option<String>)`](crate::client::fluent_builders::StopCalculationExecution::set_calculation_execution_id): <p>The calculation execution UUID.</p>
    /// - On success, responds with [`StopCalculationExecutionOutput`](crate::output::StopCalculationExecutionOutput) with field(s):
    ///   - [`state(Option<CalculationExecutionState>)`](crate::output::StopCalculationExecutionOutput::state): <p> <code>CREATING</code> - The calculation is in the process of being created.</p>  <p> <code>CREATED</code> - The calculation has been created and is ready to run.</p>  <p> <code>QUEUED</code> - The calculation has been queued for processing.</p>  <p> <code>RUNNING</code> - The calculation is running.</p>  <p> <code>CANCELING</code> - A request to cancel the calculation has been received and the system is working to stop it.</p>  <p> <code>CANCELED</code> - The calculation is no longer running as the result of a cancel request.</p>  <p> <code>COMPLETED</code> - The calculation has completed without error.</p>  <p> <code>FAILED</code> - The calculation failed and is no longer running.</p>
    /// - On failure, responds with [`SdkError<StopCalculationExecutionError>`](crate::error::StopCalculationExecutionError)
    pub fn stop_calculation_execution(&self) -> fluent_builders::StopCalculationExecution {
        fluent_builders::StopCalculationExecution::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`StopQueryExecution`](crate::client::fluent_builders::StopQueryExecution) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`query_execution_id(impl Into<String>)`](crate::client::fluent_builders::StopQueryExecution::query_execution_id) / [`set_query_execution_id(Option<String>)`](crate::client::fluent_builders::StopQueryExecution::set_query_execution_id): <p>The unique ID of the query execution to stop.</p>
    /// - On success, responds with [`StopQueryExecutionOutput`](crate::output::StopQueryExecutionOutput)

    /// - On failure, responds with [`SdkError<StopQueryExecutionError>`](crate::error::StopQueryExecutionError)
    pub fn stop_query_execution(&self) -> fluent_builders::StopQueryExecution {
        fluent_builders::StopQueryExecution::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>Specifies the ARN of the Athena resource (workgroup or data catalog) to which tags are to be added.</p>
    ///   - [`tags(Vec<Tag>)`](crate::client::fluent_builders::TagResource::tags) / [`set_tags(Option<Vec<Tag>>)`](crate::client::fluent_builders::TagResource::set_tags): <p>A collection of one or more tags, separated by commas, to be added to an Athena workgroup or data catalog 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 [`TerminateSession`](crate::client::fluent_builders::TerminateSession) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`session_id(impl Into<String>)`](crate::client::fluent_builders::TerminateSession::session_id) / [`set_session_id(Option<String>)`](crate::client::fluent_builders::TerminateSession::set_session_id): <p>The session ID.</p>
    /// - On success, responds with [`TerminateSessionOutput`](crate::output::TerminateSessionOutput) with field(s):
    ///   - [`state(Option<SessionState>)`](crate::output::TerminateSessionOutput::state): <p>The state of the session. A description of each state follows.</p>  <p> <code>CREATING</code> - The session is being started, including acquiring resources.</p>  <p> <code>CREATED</code> - The session has been started.</p>  <p> <code>IDLE</code> - The session is able to accept a calculation.</p>  <p> <code>BUSY</code> - The session is processing another task and is unable to accept a calculation.</p>  <p> <code>TERMINATING</code> - The session is in the process of shutting down.</p>  <p> <code>TERMINATED</code> - The session and its resources are no longer running.</p>  <p> <code>DEGRADED</code> - The session has no healthy coordinators.</p>  <p> <code>FAILED</code> - Due to a failure, the session and its resources are no longer running.</p>
    /// - On failure, responds with [`SdkError<TerminateSessionError>`](crate::error::TerminateSessionError)
    pub fn terminate_session(&self) -> fluent_builders::TerminateSession {
        fluent_builders::TerminateSession::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>Specifies the ARN of the resource from which tags are to be removed.</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>A comma-separated list of one or more tag keys whose tags are to be removed from the specified resource.</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 [`UpdateDataCatalog`](crate::client::fluent_builders::UpdateDataCatalog) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::UpdateDataCatalog::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::UpdateDataCatalog::set_name): <p>The name of the data catalog to update. The catalog name must be unique for the Amazon Web Services account and can use a maximum of 127 alphanumeric, underscore, at sign, or hyphen characters. The remainder of the length constraint of 256 is reserved for use by Athena.</p>
    ///   - [`r#type(DataCatalogType)`](crate::client::fluent_builders::UpdateDataCatalog::type) / [`set_type(Option<DataCatalogType>)`](crate::client::fluent_builders::UpdateDataCatalog::set_type): <p>Specifies the type of data catalog to update. Specify <code>LAMBDA</code> for a federated catalog, <code>HIVE</code> for an external hive metastore, or <code>GLUE</code> for an Glue Data Catalog.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::UpdateDataCatalog::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::UpdateDataCatalog::set_description): <p>New or modified text that describes the data catalog.</p>
    ///   - [`parameters(HashMap<String, String>)`](crate::client::fluent_builders::UpdateDataCatalog::parameters) / [`set_parameters(Option<HashMap<String, String>>)`](crate::client::fluent_builders::UpdateDataCatalog::set_parameters): <p>Specifies the Lambda function or functions to use for updating the data catalog. This is a mapping whose values depend on the catalog type. </p>  <ul>   <li> <p>For the <code>HIVE</code> data catalog type, use the following syntax. The <code>metadata-function</code> parameter is required. <code>The sdk-version</code> parameter is optional and defaults to the currently supported version.</p> <p> <code>metadata-function=<i>lambda_arn</i>, sdk-version=<i>version_number</i> </code> </p> </li>   <li> <p>For the <code>LAMBDA</code> data catalog type, use one of the following sets of required parameters, but not both.</p>    <ul>     <li> <p>If you have one Lambda function that processes metadata and another for reading the actual data, use the following syntax. Both parameters are required.</p> <p> <code>metadata-function=<i>lambda_arn</i>, record-function=<i>lambda_arn</i> </code> </p> </li>     <li> <p> If you have a composite Lambda function that processes both metadata and data, use the following syntax to specify your Lambda function.</p> <p> <code>function=<i>lambda_arn</i> </code> </p> </li>    </ul> </li>  </ul>
    /// - On success, responds with [`UpdateDataCatalogOutput`](crate::output::UpdateDataCatalogOutput)

    /// - On failure, responds with [`SdkError<UpdateDataCatalogError>`](crate::error::UpdateDataCatalogError)
    pub fn update_data_catalog(&self) -> fluent_builders::UpdateDataCatalog {
        fluent_builders::UpdateDataCatalog::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`UpdateNamedQuery`](crate::client::fluent_builders::UpdateNamedQuery) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`named_query_id(impl Into<String>)`](crate::client::fluent_builders::UpdateNamedQuery::named_query_id) / [`set_named_query_id(Option<String>)`](crate::client::fluent_builders::UpdateNamedQuery::set_named_query_id): <p>The unique identifier (UUID) of the query.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::UpdateNamedQuery::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::UpdateNamedQuery::set_name): <p>The name of the query.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::UpdateNamedQuery::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::UpdateNamedQuery::set_description): <p>The query description.</p>
    ///   - [`query_string(impl Into<String>)`](crate::client::fluent_builders::UpdateNamedQuery::query_string) / [`set_query_string(Option<String>)`](crate::client::fluent_builders::UpdateNamedQuery::set_query_string): <p>The contents of the query with all query statements.</p>
    /// - On success, responds with [`UpdateNamedQueryOutput`](crate::output::UpdateNamedQueryOutput)

    /// - On failure, responds with [`SdkError<UpdateNamedQueryError>`](crate::error::UpdateNamedQueryError)
    pub fn update_named_query(&self) -> fluent_builders::UpdateNamedQuery {
        fluent_builders::UpdateNamedQuery::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`UpdateNotebook`](crate::client::fluent_builders::UpdateNotebook) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`notebook_id(impl Into<String>)`](crate::client::fluent_builders::UpdateNotebook::notebook_id) / [`set_notebook_id(Option<String>)`](crate::client::fluent_builders::UpdateNotebook::set_notebook_id): <p>The ID of the notebook to update.</p>
    ///   - [`payload(impl Into<String>)`](crate::client::fluent_builders::UpdateNotebook::payload) / [`set_payload(Option<String>)`](crate::client::fluent_builders::UpdateNotebook::set_payload): <p>The updated content for the notebook.</p>
    ///   - [`r#type(NotebookType)`](crate::client::fluent_builders::UpdateNotebook::type) / [`set_type(Option<NotebookType>)`](crate::client::fluent_builders::UpdateNotebook::set_type): <p>The notebook content type. Currently, the only valid type is <code>IPYNB</code>.</p>
    ///   - [`session_id(impl Into<String>)`](crate::client::fluent_builders::UpdateNotebook::session_id) / [`set_session_id(Option<String>)`](crate::client::fluent_builders::UpdateNotebook::set_session_id): <p>The ID of the session in which the notebook will be updated.</p>
    ///   - [`client_request_token(impl Into<String>)`](crate::client::fluent_builders::UpdateNotebook::client_request_token) / [`set_client_request_token(Option<String>)`](crate::client::fluent_builders::UpdateNotebook::set_client_request_token): <p>A unique case-sensitive string used to ensure the request to create the notebook is idempotent (executes only once).</p> <important>   <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for you. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>  </important>
    /// - On success, responds with [`UpdateNotebookOutput`](crate::output::UpdateNotebookOutput)

    /// - On failure, responds with [`SdkError<UpdateNotebookError>`](crate::error::UpdateNotebookError)
    pub fn update_notebook(&self) -> fluent_builders::UpdateNotebook {
        fluent_builders::UpdateNotebook::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`UpdateNotebookMetadata`](crate::client::fluent_builders::UpdateNotebookMetadata) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`notebook_id(impl Into<String>)`](crate::client::fluent_builders::UpdateNotebookMetadata::notebook_id) / [`set_notebook_id(Option<String>)`](crate::client::fluent_builders::UpdateNotebookMetadata::set_notebook_id): <p>The ID of the notebook to update the metadata for.</p>
    ///   - [`client_request_token(impl Into<String>)`](crate::client::fluent_builders::UpdateNotebookMetadata::client_request_token) / [`set_client_request_token(Option<String>)`](crate::client::fluent_builders::UpdateNotebookMetadata::set_client_request_token): <p>A unique case-sensitive string used to ensure the request to create the notebook is idempotent (executes only once).</p> <important>   <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for you. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>  </important>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::UpdateNotebookMetadata::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::UpdateNotebookMetadata::set_name): <p>The name to update the notebook to.</p>
    /// - On success, responds with [`UpdateNotebookMetadataOutput`](crate::output::UpdateNotebookMetadataOutput)

    /// - On failure, responds with [`SdkError<UpdateNotebookMetadataError>`](crate::error::UpdateNotebookMetadataError)
    pub fn update_notebook_metadata(&self) -> fluent_builders::UpdateNotebookMetadata {
        fluent_builders::UpdateNotebookMetadata::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`UpdatePreparedStatement`](crate::client::fluent_builders::UpdatePreparedStatement) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`statement_name(impl Into<String>)`](crate::client::fluent_builders::UpdatePreparedStatement::statement_name) / [`set_statement_name(Option<String>)`](crate::client::fluent_builders::UpdatePreparedStatement::set_statement_name): <p>The name of the prepared statement.</p>
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::UpdatePreparedStatement::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::UpdatePreparedStatement::set_work_group): <p>The workgroup for the prepared statement.</p>
    ///   - [`query_statement(impl Into<String>)`](crate::client::fluent_builders::UpdatePreparedStatement::query_statement) / [`set_query_statement(Option<String>)`](crate::client::fluent_builders::UpdatePreparedStatement::set_query_statement): <p>The query string for the prepared statement.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::UpdatePreparedStatement::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::UpdatePreparedStatement::set_description): <p>The description of the prepared statement.</p>
    /// - On success, responds with [`UpdatePreparedStatementOutput`](crate::output::UpdatePreparedStatementOutput)

    /// - On failure, responds with [`SdkError<UpdatePreparedStatementError>`](crate::error::UpdatePreparedStatementError)
    pub fn update_prepared_statement(&self) -> fluent_builders::UpdatePreparedStatement {
        fluent_builders::UpdatePreparedStatement::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`UpdateWorkGroup`](crate::client::fluent_builders::UpdateWorkGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`work_group(impl Into<String>)`](crate::client::fluent_builders::UpdateWorkGroup::work_group) / [`set_work_group(Option<String>)`](crate::client::fluent_builders::UpdateWorkGroup::set_work_group): <p>The specified workgroup that will be updated.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::UpdateWorkGroup::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::UpdateWorkGroup::set_description): <p>The workgroup description.</p>
    ///   - [`configuration_updates(WorkGroupConfigurationUpdates)`](crate::client::fluent_builders::UpdateWorkGroup::configuration_updates) / [`set_configuration_updates(Option<WorkGroupConfigurationUpdates>)`](crate::client::fluent_builders::UpdateWorkGroup::set_configuration_updates): <p>Contains configuration updates for an Athena SQL workgroup.</p>
    ///   - [`state(WorkGroupState)`](crate::client::fluent_builders::UpdateWorkGroup::state) / [`set_state(Option<WorkGroupState>)`](crate::client::fluent_builders::UpdateWorkGroup::set_state): <p>The workgroup state that will be updated for the given workgroup.</p>
    /// - On success, responds with [`UpdateWorkGroupOutput`](crate::output::UpdateWorkGroupOutput)

    /// - On failure, responds with [`SdkError<UpdateWorkGroupError>`](crate::error::UpdateWorkGroupError)
    pub fn update_work_group(&self) -> fluent_builders::UpdateWorkGroup {
        fluent_builders::UpdateWorkGroup::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 `BatchGetNamedQuery`.
    ///
    /// <p>Returns the details of a single named query or a list of up to 50 queries, which you provide as an array of query ID strings. Requires you to have access to the workgroup in which the queries were saved. Use <code>ListNamedQueriesInput</code> to get the list of named query IDs in the specified workgroup. If information could not be retrieved for a submitted query ID, information about the query ID submitted is listed under <code>UnprocessedNamedQueryId</code>. Named queries differ from executed queries. Use <code>BatchGetQueryExecutionInput</code> to get details about each unique query execution, and <code>ListQueryExecutionsInput</code> to get a list of query execution IDs.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct BatchGetNamedQuery {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::batch_get_named_query_input::Builder,
    }
    impl BatchGetNamedQuery {
        /// Creates a new `BatchGetNamedQuery`.
        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::BatchGetNamedQuery,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::BatchGetNamedQueryError>,
        > {
            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::BatchGetNamedQueryOutput,
            aws_smithy_http::result::SdkError<crate::error::BatchGetNamedQueryError>,
        > {
            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
        }
        /// Appends an item to `NamedQueryIds`.
        ///
        /// To override the contents of this collection use [`set_named_query_ids`](Self::set_named_query_ids).
        ///
        /// <p>An array of query IDs.</p>
        pub fn named_query_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.named_query_ids(input.into());
            self
        }
        /// <p>An array of query IDs.</p>
        pub fn set_named_query_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_named_query_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `BatchGetPreparedStatement`.
    ///
    /// <p>Returns the details of a single prepared statement or a list of up to 256 prepared statements for the array of prepared statement names that you provide. Requires you to have access to the workgroup to which the prepared statements belong. If a prepared statement cannot be retrieved for the name specified, the statement is listed in <code>UnprocessedPreparedStatementNames</code>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct BatchGetPreparedStatement {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::batch_get_prepared_statement_input::Builder,
    }
    impl BatchGetPreparedStatement {
        /// Creates a new `BatchGetPreparedStatement`.
        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::BatchGetPreparedStatement,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::BatchGetPreparedStatementError>,
        > {
            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::BatchGetPreparedStatementOutput,
            aws_smithy_http::result::SdkError<crate::error::BatchGetPreparedStatementError>,
        > {
            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
        }
        /// Appends an item to `PreparedStatementNames`.
        ///
        /// To override the contents of this collection use [`set_prepared_statement_names`](Self::set_prepared_statement_names).
        ///
        /// <p>A list of prepared statement names to return.</p>
        pub fn prepared_statement_names(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.prepared_statement_names(input.into());
            self
        }
        /// <p>A list of prepared statement names to return.</p>
        pub fn set_prepared_statement_names(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_prepared_statement_names(input);
            self
        }
        /// <p>The name of the workgroup to which the prepared statements belong.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The name of the workgroup to which the prepared statements belong.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
    }
    /// Fluent builder constructing a request to `BatchGetQueryExecution`.
    ///
    /// <p>Returns the details of a single query execution or a list of up to 50 query executions, which you provide as an array of query execution ID strings. Requires you to have access to the workgroup in which the queries ran. To get a list of query execution IDs, use <code>ListQueryExecutionsInput$WorkGroup</code>. Query executions differ from named (saved) queries. Use <code>BatchGetNamedQueryInput</code> to get details about named queries.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct BatchGetQueryExecution {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::batch_get_query_execution_input::Builder,
    }
    impl BatchGetQueryExecution {
        /// Creates a new `BatchGetQueryExecution`.
        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::BatchGetQueryExecution,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::BatchGetQueryExecutionError>,
        > {
            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::BatchGetQueryExecutionOutput,
            aws_smithy_http::result::SdkError<crate::error::BatchGetQueryExecutionError>,
        > {
            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
        }
        /// Appends an item to `QueryExecutionIds`.
        ///
        /// To override the contents of this collection use [`set_query_execution_ids`](Self::set_query_execution_ids).
        ///
        /// <p>An array of query execution IDs.</p>
        pub fn query_execution_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.query_execution_ids(input.into());
            self
        }
        /// <p>An array of query execution IDs.</p>
        pub fn set_query_execution_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_query_execution_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateDataCatalog`.
    ///
    /// <p>Creates (registers) a data catalog with the specified name and properties. Catalogs created are visible to all users of the same Amazon Web Services account.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateDataCatalog {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_data_catalog_input::Builder,
    }
    impl CreateDataCatalog {
        /// Creates a new `CreateDataCatalog`.
        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::CreateDataCatalog,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateDataCatalogError>,
        > {
            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::CreateDataCatalogOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateDataCatalogError>,
        > {
            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 data catalog to create. The catalog name must be unique for the Amazon Web Services account and can use a maximum of 127 alphanumeric, underscore, at sign, or hyphen characters. The remainder of the length constraint of 256 is reserved for use by Athena.</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 data catalog to create. The catalog name must be unique for the Amazon Web Services account and can use a maximum of 127 alphanumeric, underscore, at sign, or hyphen characters. The remainder of the length constraint of 256 is reserved for use by Athena.</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 type of data catalog to create: <code>LAMBDA</code> for a federated catalog, <code>HIVE</code> for an external hive metastore, or <code>GLUE</code> for an Glue Data Catalog.</p>
        pub fn r#type(mut self, input: crate::model::DataCatalogType) -> Self {
            self.inner = self.inner.r#type(input);
            self
        }
        /// <p>The type of data catalog to create: <code>LAMBDA</code> for a federated catalog, <code>HIVE</code> for an external hive metastore, or <code>GLUE</code> for an Glue Data Catalog.</p>
        pub fn set_type(
            mut self,
            input: std::option::Option<crate::model::DataCatalogType>,
        ) -> Self {
            self.inner = self.inner.set_type(input);
            self
        }
        /// <p>A description of the data catalog to be created.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description of the data catalog to be created.</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 `Parameters`.
        ///
        /// To override the contents of this collection use [`set_parameters`](Self::set_parameters).
        ///
        /// <p>Specifies the Lambda function or functions to use for creating the data catalog. This is a mapping whose values depend on the catalog type. </p>
        /// <ul>
        /// <li> <p>For the <code>HIVE</code> data catalog type, use the following syntax. The <code>metadata-function</code> parameter is required. <code>The sdk-version</code> parameter is optional and defaults to the currently supported version.</p> <p> <code>metadata-function=<i>lambda_arn</i>, sdk-version=<i>version_number</i> </code> </p> </li>
        /// <li> <p>For the <code>LAMBDA</code> data catalog type, use one of the following sets of required parameters, but not both.</p>
        /// <ul>
        /// <li> <p>If you have one Lambda function that processes metadata and another for reading the actual data, use the following syntax. Both parameters are required.</p> <p> <code>metadata-function=<i>lambda_arn</i>, record-function=<i>lambda_arn</i> </code> </p> </li>
        /// <li> <p> If you have a composite Lambda function that processes both metadata and data, use the following syntax to specify your Lambda function.</p> <p> <code>function=<i>lambda_arn</i> </code> </p> </li>
        /// </ul> </li>
        /// <li> <p>The <code>GLUE</code> type takes a catalog ID parameter and is required. The <code> <i>catalog_id</i> </code> is the account ID of the Amazon Web Services account to which the Glue Data Catalog belongs.</p> <p> <code>catalog-id=<i>catalog_id</i> </code> </p>
        /// <ul>
        /// <li> <p>The <code>GLUE</code> data catalog type also applies to the default <code>AwsDataCatalog</code> that already exists in your account, of which you can have only one and cannot modify.</p> </li>
        /// <li> <p>Queries that specify a Glue Data Catalog other than the default <code>AwsDataCatalog</code> must be run on Athena engine version 2.</p> </li>
        /// <li> <p>In Regions where Athena engine version 2 is not available, creating new Glue data catalogs results in an <code>INVALID_INPUT</code> error.</p> </li>
        /// </ul> </li>
        /// </ul>
        pub fn parameters(
            mut self,
            k: impl Into<std::string::String>,
            v: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.parameters(k.into(), v.into());
            self
        }
        /// <p>Specifies the Lambda function or functions to use for creating the data catalog. This is a mapping whose values depend on the catalog type. </p>
        /// <ul>
        /// <li> <p>For the <code>HIVE</code> data catalog type, use the following syntax. The <code>metadata-function</code> parameter is required. <code>The sdk-version</code> parameter is optional and defaults to the currently supported version.</p> <p> <code>metadata-function=<i>lambda_arn</i>, sdk-version=<i>version_number</i> </code> </p> </li>
        /// <li> <p>For the <code>LAMBDA</code> data catalog type, use one of the following sets of required parameters, but not both.</p>
        /// <ul>
        /// <li> <p>If you have one Lambda function that processes metadata and another for reading the actual data, use the following syntax. Both parameters are required.</p> <p> <code>metadata-function=<i>lambda_arn</i>, record-function=<i>lambda_arn</i> </code> </p> </li>
        /// <li> <p> If you have a composite Lambda function that processes both metadata and data, use the following syntax to specify your Lambda function.</p> <p> <code>function=<i>lambda_arn</i> </code> </p> </li>
        /// </ul> </li>
        /// <li> <p>The <code>GLUE</code> type takes a catalog ID parameter and is required. The <code> <i>catalog_id</i> </code> is the account ID of the Amazon Web Services account to which the Glue Data Catalog belongs.</p> <p> <code>catalog-id=<i>catalog_id</i> </code> </p>
        /// <ul>
        /// <li> <p>The <code>GLUE</code> data catalog type also applies to the default <code>AwsDataCatalog</code> that already exists in your account, of which you can have only one and cannot modify.</p> </li>
        /// <li> <p>Queries that specify a Glue Data Catalog other than the default <code>AwsDataCatalog</code> must be run on Athena engine version 2.</p> </li>
        /// <li> <p>In Regions where Athena engine version 2 is not available, creating new Glue data catalogs results in an <code>INVALID_INPUT</code> error.</p> </li>
        /// </ul> </li>
        /// </ul>
        pub fn set_parameters(
            mut self,
            input: std::option::Option<
                std::collections::HashMap<std::string::String, std::string::String>,
            >,
        ) -> Self {
            self.inner = self.inner.set_parameters(input);
            self
        }
        /// Appends an item to `Tags`.
        ///
        /// To override the contents of this collection use [`set_tags`](Self::set_tags).
        ///
        /// <p>A list of comma separated tags to add to the data catalog that is created.</p>
        pub fn tags(mut self, input: crate::model::Tag) -> Self {
            self.inner = self.inner.tags(input);
            self
        }
        /// <p>A list of comma separated tags to add to the data catalog that is created.</p>
        pub fn set_tags(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Tag>>,
        ) -> Self {
            self.inner = self.inner.set_tags(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateNamedQuery`.
    ///
    /// <p>Creates a named query in the specified workgroup. Requires that you have access to the workgroup.</p>
    /// <p>For code samples using the Amazon Web Services SDK for Java, see <a href="http://docs.aws.amazon.com/athena/latest/ug/code-samples.html">Examples and Code Samples</a> in the <i>Amazon Athena User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateNamedQuery {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_named_query_input::Builder,
    }
    impl CreateNamedQuery {
        /// Creates a new `CreateNamedQuery`.
        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::CreateNamedQuery,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateNamedQueryError>,
        > {
            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::CreateNamedQueryOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateNamedQueryError>,
        > {
            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 query name.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>The query name.</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 query description.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The query description.</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 database to which the query belongs.</p>
        pub fn database(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.database(input.into());
            self
        }
        /// <p>The database to which the query belongs.</p>
        pub fn set_database(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_database(input);
            self
        }
        /// <p>The contents of the query with all query statements.</p>
        pub fn query_string(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.query_string(input.into());
            self
        }
        /// <p>The contents of the query with all query statements.</p>
        pub fn set_query_string(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_query_string(input);
            self
        }
        /// <p>A unique case-sensitive string used to ensure the request to create the query is idempotent (executes only once). If another <code>CreateNamedQuery</code> request is received, the same response is returned and another query is not created. If a parameter has changed, for example, the <code>QueryString</code>, an error is returned.</p> <important>
        /// <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for users. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>
        /// </important>
        pub fn client_request_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_request_token(input.into());
            self
        }
        /// <p>A unique case-sensitive string used to ensure the request to create the query is idempotent (executes only once). If another <code>CreateNamedQuery</code> request is received, the same response is returned and another query is not created. If a parameter has changed, for example, the <code>QueryString</code>, an error is returned.</p> <important>
        /// <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for users. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>
        /// </important>
        pub fn set_client_request_token(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_request_token(input);
            self
        }
        /// <p>The name of the workgroup in which the named query is being created.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The name of the workgroup in which the named query is being created.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateNotebook`.
    ///
    /// <p>Creates an empty <code>ipynb</code> file in the specified Apache Spark enabled workgroup. Throws an error if a file in the workgroup with the same name already exists.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateNotebook {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_notebook_input::Builder,
    }
    impl CreateNotebook {
        /// Creates a new `CreateNotebook`.
        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::CreateNotebook,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateNotebookError>,
        > {
            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::CreateNotebookOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateNotebookError>,
        > {
            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 Spark enabled workgroup in which the notebook will be created.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The name of the Spark enabled workgroup in which the notebook will be created.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
        /// <p>The name of the <code>ipynb</code> file to be created in the Spark workgroup, without the <code>.ipynb</code> extension.</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 <code>ipynb</code> file to be created in the Spark workgroup, without the <code>.ipynb</code> extension.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
        /// <p>A unique case-sensitive string used to ensure the request to create the notebook is idempotent (executes only once).</p> <important>
        /// <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for you. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>
        /// </important>
        pub fn client_request_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_request_token(input.into());
            self
        }
        /// <p>A unique case-sensitive string used to ensure the request to create the notebook is idempotent (executes only once).</p> <important>
        /// <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for you. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>
        /// </important>
        pub fn set_client_request_token(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_request_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreatePreparedStatement`.
    ///
    /// <p>Creates a prepared statement for use with SQL queries in Athena.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreatePreparedStatement {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_prepared_statement_input::Builder,
    }
    impl CreatePreparedStatement {
        /// Creates a new `CreatePreparedStatement`.
        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::CreatePreparedStatement,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreatePreparedStatementError>,
        > {
            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::CreatePreparedStatementOutput,
            aws_smithy_http::result::SdkError<crate::error::CreatePreparedStatementError>,
        > {
            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 prepared statement.</p>
        pub fn statement_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.statement_name(input.into());
            self
        }
        /// <p>The name of the prepared statement.</p>
        pub fn set_statement_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_statement_name(input);
            self
        }
        /// <p>The name of the workgroup to which the prepared statement belongs.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The name of the workgroup to which the prepared statement belongs.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
        /// <p>The query string for the prepared statement.</p>
        pub fn query_statement(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.query_statement(input.into());
            self
        }
        /// <p>The query string for the prepared statement.</p>
        pub fn set_query_statement(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_query_statement(input);
            self
        }
        /// <p>The description of the prepared statement.</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 prepared statement.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreatePresignedNotebookUrl`.
    ///
    /// <p>Gets an authentication token and the URL at which the notebook can be accessed. During programmatic access, <code>CreatePresignedNotebookUrl</code> must be called every 10 minutes to refresh the authentication token.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreatePresignedNotebookUrl {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_presigned_notebook_url_input::Builder,
    }
    impl CreatePresignedNotebookUrl {
        /// Creates a new `CreatePresignedNotebookUrl`.
        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::CreatePresignedNotebookUrl,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreatePresignedNotebookUrlError>,
        > {
            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::CreatePresignedNotebookUrlOutput,
            aws_smithy_http::result::SdkError<crate::error::CreatePresignedNotebookUrlError>,
        > {
            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 session ID.</p>
        pub fn session_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.session_id(input.into());
            self
        }
        /// <p>The session ID.</p>
        pub fn set_session_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_session_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateWorkGroup`.
    ///
    /// <p>Creates a workgroup with the specified name. Only one of <code>Configurations</code> or <code>Configuration</code> can be specified; <code>Configurations</code> for a workgroup with multi engine support (for example, an Apache Spark enabled workgroup) or <code>Configuration</code> for an Athena SQL workgroup.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateWorkGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_work_group_input::Builder,
    }
    impl CreateWorkGroup {
        /// Creates a new `CreateWorkGroup`.
        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::CreateWorkGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateWorkGroupError>,
        > {
            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::CreateWorkGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateWorkGroupError>,
        > {
            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 workgroup name.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>The workgroup name.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
        /// <p>Contains configuration information for creating an Athena SQL workgroup, which includes the location in Amazon S3 where query results are stored, the encryption configuration, if any, used for encrypting query results, whether the Amazon CloudWatch Metrics are enabled for the workgroup, the limit for the amount of bytes scanned (cutoff) per query, if it is specified, and whether workgroup's settings (specified with <code>EnforceWorkGroupConfiguration</code>) in the <code>WorkGroupConfiguration</code> override client-side settings. See <code>WorkGroupConfiguration$EnforceWorkGroupConfiguration</code>.</p>
        pub fn configuration(mut self, input: crate::model::WorkGroupConfiguration) -> Self {
            self.inner = self.inner.configuration(input);
            self
        }
        /// <p>Contains configuration information for creating an Athena SQL workgroup, which includes the location in Amazon S3 where query results are stored, the encryption configuration, if any, used for encrypting query results, whether the Amazon CloudWatch Metrics are enabled for the workgroup, the limit for the amount of bytes scanned (cutoff) per query, if it is specified, and whether workgroup's settings (specified with <code>EnforceWorkGroupConfiguration</code>) in the <code>WorkGroupConfiguration</code> override client-side settings. See <code>WorkGroupConfiguration$EnforceWorkGroupConfiguration</code>.</p>
        pub fn set_configuration(
            mut self,
            input: std::option::Option<crate::model::WorkGroupConfiguration>,
        ) -> Self {
            self.inner = self.inner.set_configuration(input);
            self
        }
        /// <p>The workgroup description.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The workgroup description.</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 `Tags`.
        ///
        /// To override the contents of this collection use [`set_tags`](Self::set_tags).
        ///
        /// <p>A list of comma separated tags to add to the workgroup that is created.</p>
        pub fn tags(mut self, input: crate::model::Tag) -> Self {
            self.inner = self.inner.tags(input);
            self
        }
        /// <p>A list of comma separated tags to add to the workgroup that is created.</p>
        pub fn set_tags(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Tag>>,
        ) -> Self {
            self.inner = self.inner.set_tags(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteDataCatalog`.
    ///
    /// <p>Deletes a data catalog.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteDataCatalog {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_data_catalog_input::Builder,
    }
    impl DeleteDataCatalog {
        /// Creates a new `DeleteDataCatalog`.
        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::DeleteDataCatalog,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteDataCatalogError>,
        > {
            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::DeleteDataCatalogOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteDataCatalogError>,
        > {
            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 data catalog to delete.</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 data catalog to delete.</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 `DeleteNamedQuery`.
    ///
    /// <p>Deletes the named query if you have access to the workgroup in which the query was saved.</p>
    /// <p>For code samples using the Amazon Web Services SDK for Java, see <a href="http://docs.aws.amazon.com/athena/latest/ug/code-samples.html">Examples and Code Samples</a> in the <i>Amazon Athena User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteNamedQuery {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_named_query_input::Builder,
    }
    impl DeleteNamedQuery {
        /// Creates a new `DeleteNamedQuery`.
        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::DeleteNamedQuery,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteNamedQueryError>,
        > {
            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::DeleteNamedQueryOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteNamedQueryError>,
        > {
            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 unique ID of the query to delete.</p>
        pub fn named_query_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.named_query_id(input.into());
            self
        }
        /// <p>The unique ID of the query to delete.</p>
        pub fn set_named_query_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_named_query_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteNotebook`.
    ///
    /// <p>Deletes the specified notebook.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteNotebook {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_notebook_input::Builder,
    }
    impl DeleteNotebook {
        /// Creates a new `DeleteNotebook`.
        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::DeleteNotebook,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteNotebookError>,
        > {
            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::DeleteNotebookOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteNotebookError>,
        > {
            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 notebook to delete.</p>
        pub fn notebook_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.notebook_id(input.into());
            self
        }
        /// <p>The ID of the notebook to delete.</p>
        pub fn set_notebook_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_notebook_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeletePreparedStatement`.
    ///
    /// <p>Deletes the prepared statement with the specified name from the specified workgroup.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeletePreparedStatement {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_prepared_statement_input::Builder,
    }
    impl DeletePreparedStatement {
        /// Creates a new `DeletePreparedStatement`.
        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::DeletePreparedStatement,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeletePreparedStatementError>,
        > {
            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::DeletePreparedStatementOutput,
            aws_smithy_http::result::SdkError<crate::error::DeletePreparedStatementError>,
        > {
            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 prepared statement to delete.</p>
        pub fn statement_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.statement_name(input.into());
            self
        }
        /// <p>The name of the prepared statement to delete.</p>
        pub fn set_statement_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_statement_name(input);
            self
        }
        /// <p>The workgroup to which the statement to be deleted belongs.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The workgroup to which the statement to be deleted belongs.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteWorkGroup`.
    ///
    /// <p>Deletes the workgroup with the specified name. The primary workgroup cannot be deleted.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteWorkGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_work_group_input::Builder,
    }
    impl DeleteWorkGroup {
        /// Creates a new `DeleteWorkGroup`.
        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::DeleteWorkGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteWorkGroupError>,
        > {
            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::DeleteWorkGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteWorkGroupError>,
        > {
            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 unique name of the workgroup to delete.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The unique name of the workgroup to delete.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
        /// <p>The option to delete the workgroup and its contents even if the workgroup contains any named queries or query executions.</p>
        pub fn recursive_delete_option(mut self, input: bool) -> Self {
            self.inner = self.inner.recursive_delete_option(input);
            self
        }
        /// <p>The option to delete the workgroup and its contents even if the workgroup contains any named queries or query executions.</p>
        pub fn set_recursive_delete_option(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_recursive_delete_option(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ExportNotebook`.
    ///
    /// <p>Exports the specified notebook and its metadata.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ExportNotebook {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::export_notebook_input::Builder,
    }
    impl ExportNotebook {
        /// Creates a new `ExportNotebook`.
        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::ExportNotebook,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ExportNotebookError>,
        > {
            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::ExportNotebookOutput,
            aws_smithy_http::result::SdkError<crate::error::ExportNotebookError>,
        > {
            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 notebook to export.</p>
        pub fn notebook_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.notebook_id(input.into());
            self
        }
        /// <p>The ID of the notebook to export.</p>
        pub fn set_notebook_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_notebook_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetCalculationExecution`.
    ///
    /// <p>Describes a previously submitted calculation execution.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetCalculationExecution {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_calculation_execution_input::Builder,
    }
    impl GetCalculationExecution {
        /// Creates a new `GetCalculationExecution`.
        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::GetCalculationExecution,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetCalculationExecutionError>,
        > {
            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::GetCalculationExecutionOutput,
            aws_smithy_http::result::SdkError<crate::error::GetCalculationExecutionError>,
        > {
            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 calculation execution UUID.</p>
        pub fn calculation_execution_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.calculation_execution_id(input.into());
            self
        }
        /// <p>The calculation execution UUID.</p>
        pub fn set_calculation_execution_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_calculation_execution_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetCalculationExecutionCode`.
    ///
    /// <p>Retrieves a pre-signed URL to a copy of the code that was executed for the calculation.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetCalculationExecutionCode {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_calculation_execution_code_input::Builder,
    }
    impl GetCalculationExecutionCode {
        /// Creates a new `GetCalculationExecutionCode`.
        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::GetCalculationExecutionCode,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetCalculationExecutionCodeError>,
        > {
            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::GetCalculationExecutionCodeOutput,
            aws_smithy_http::result::SdkError<crate::error::GetCalculationExecutionCodeError>,
        > {
            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 calculation execution UUID.</p>
        pub fn calculation_execution_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.calculation_execution_id(input.into());
            self
        }
        /// <p>The calculation execution UUID.</p>
        pub fn set_calculation_execution_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_calculation_execution_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetCalculationExecutionStatus`.
    ///
    /// <p>Gets the status of a current calculation.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetCalculationExecutionStatus {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_calculation_execution_status_input::Builder,
    }
    impl GetCalculationExecutionStatus {
        /// Creates a new `GetCalculationExecutionStatus`.
        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::GetCalculationExecutionStatus,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetCalculationExecutionStatusError>,
        > {
            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::GetCalculationExecutionStatusOutput,
            aws_smithy_http::result::SdkError<crate::error::GetCalculationExecutionStatusError>,
        > {
            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 calculation execution UUID.</p>
        pub fn calculation_execution_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.calculation_execution_id(input.into());
            self
        }
        /// <p>The calculation execution UUID.</p>
        pub fn set_calculation_execution_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_calculation_execution_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetDatabase`.
    ///
    /// <p>Returns a database object for the specified database and data catalog.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetDatabase {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_database_input::Builder,
    }
    impl GetDatabase {
        /// Creates a new `GetDatabase`.
        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::GetDatabase,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetDatabaseError>,
        > {
            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::GetDatabaseOutput,
            aws_smithy_http::result::SdkError<crate::error::GetDatabaseError>,
        > {
            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 data catalog that contains the database to return.</p>
        pub fn catalog_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.catalog_name(input.into());
            self
        }
        /// <p>The name of the data catalog that contains the database to return.</p>
        pub fn set_catalog_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_catalog_name(input);
            self
        }
        /// <p>The name of the database to return.</p>
        pub fn database_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.database_name(input.into());
            self
        }
        /// <p>The name of the database to return.</p>
        pub fn set_database_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_database_name(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetDataCatalog`.
    ///
    /// <p>Returns the specified data catalog.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetDataCatalog {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_data_catalog_input::Builder,
    }
    impl GetDataCatalog {
        /// Creates a new `GetDataCatalog`.
        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::GetDataCatalog,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetDataCatalogError>,
        > {
            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::GetDataCatalogOutput,
            aws_smithy_http::result::SdkError<crate::error::GetDataCatalogError>,
        > {
            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 data catalog to return.</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 data catalog to return.</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 `GetNamedQuery`.
    ///
    /// <p>Returns information about a single query. Requires that you have access to the workgroup in which the query was saved.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetNamedQuery {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_named_query_input::Builder,
    }
    impl GetNamedQuery {
        /// Creates a new `GetNamedQuery`.
        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::GetNamedQuery,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetNamedQueryError>,
        > {
            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::GetNamedQueryOutput,
            aws_smithy_http::result::SdkError<crate::error::GetNamedQueryError>,
        > {
            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 unique ID of the query. Use <code>ListNamedQueries</code> to get query IDs.</p>
        pub fn named_query_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.named_query_id(input.into());
            self
        }
        /// <p>The unique ID of the query. Use <code>ListNamedQueries</code> to get query IDs.</p>
        pub fn set_named_query_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_named_query_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetNotebookMetadata`.
    ///
    /// <p>Retrieves notebook metadata for the specified notebook ID.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetNotebookMetadata {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_notebook_metadata_input::Builder,
    }
    impl GetNotebookMetadata {
        /// Creates a new `GetNotebookMetadata`.
        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::GetNotebookMetadata,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetNotebookMetadataError>,
        > {
            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::GetNotebookMetadataOutput,
            aws_smithy_http::result::SdkError<crate::error::GetNotebookMetadataError>,
        > {
            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 notebook whose metadata is to be retrieved.</p>
        pub fn notebook_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.notebook_id(input.into());
            self
        }
        /// <p>The ID of the notebook whose metadata is to be retrieved.</p>
        pub fn set_notebook_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_notebook_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetPreparedStatement`.
    ///
    /// <p>Retrieves the prepared statement with the specified name from the specified workgroup.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetPreparedStatement {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_prepared_statement_input::Builder,
    }
    impl GetPreparedStatement {
        /// Creates a new `GetPreparedStatement`.
        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::GetPreparedStatement,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetPreparedStatementError>,
        > {
            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::GetPreparedStatementOutput,
            aws_smithy_http::result::SdkError<crate::error::GetPreparedStatementError>,
        > {
            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 prepared statement to retrieve.</p>
        pub fn statement_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.statement_name(input.into());
            self
        }
        /// <p>The name of the prepared statement to retrieve.</p>
        pub fn set_statement_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_statement_name(input);
            self
        }
        /// <p>The workgroup to which the statement to be retrieved belongs.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The workgroup to which the statement to be retrieved belongs.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetQueryExecution`.
    ///
    /// <p>Returns information about a single execution of a query if you have access to the workgroup in which the query ran. Each time a query executes, information about the query execution is saved with a unique ID.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetQueryExecution {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_query_execution_input::Builder,
    }
    impl GetQueryExecution {
        /// Creates a new `GetQueryExecution`.
        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::GetQueryExecution,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetQueryExecutionError>,
        > {
            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::GetQueryExecutionOutput,
            aws_smithy_http::result::SdkError<crate::error::GetQueryExecutionError>,
        > {
            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 unique ID of the query execution.</p>
        pub fn query_execution_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.query_execution_id(input.into());
            self
        }
        /// <p>The unique ID of the query execution.</p>
        pub fn set_query_execution_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_query_execution_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetQueryResults`.
    ///
    /// <p>Streams the results of a single query execution specified by <code>QueryExecutionId</code> from the Athena query results location in Amazon S3. For more information, see <a href="https://docs.aws.amazon.com/athena/latest/ug/querying.html">Query Results</a> in the <i>Amazon Athena User Guide</i>. This request does not execute the query but returns results. Use <code>StartQueryExecution</code> to run a query.</p>
    /// <p>To stream query results successfully, the IAM principal with permission to call <code>GetQueryResults</code> also must have permissions to the Amazon S3 <code>GetObject</code> action for the Athena query results location.</p> <important>
    /// <p>IAM principals with permission to the Amazon S3 <code>GetObject</code> action for the query results location are able to retrieve query results from Amazon S3 even if permission to the <code>GetQueryResults</code> action is denied. To restrict user or role access, ensure that Amazon S3 permissions to the Athena query location are denied.</p>
    /// </important>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetQueryResults {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_query_results_input::Builder,
    }
    impl GetQueryResults {
        /// Creates a new `GetQueryResults`.
        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::GetQueryResults,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetQueryResultsError>,
        > {
            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::GetQueryResultsOutput,
            aws_smithy_http::result::SdkError<crate::error::GetQueryResultsError>,
        > {
            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::GetQueryResultsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::GetQueryResultsPaginator {
            crate::paginator::GetQueryResultsPaginator::new(self.handle, self.inner)
        }
        /// <p>The unique ID of the query execution.</p>
        pub fn query_execution_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.query_execution_id(input.into());
            self
        }
        /// <p>The unique ID of the query execution.</p>
        pub fn set_query_execution_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_query_execution_id(input);
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</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 (rows) to return in this request.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results (rows) to return in this request.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetQueryRuntimeStatistics`.
    ///
    /// <p>Returns query execution runtime statistics related to a single execution of a query if you have access to the workgroup in which the query ran. Query execution runtime statistics are returned only when <code>QueryExecutionStatus$State</code> is in a SUCCEEDED or FAILED state. Stage-level input and output row count and data size statistics are not shown when a query has row-level filters defined in Lake Formation.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetQueryRuntimeStatistics {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_query_runtime_statistics_input::Builder,
    }
    impl GetQueryRuntimeStatistics {
        /// Creates a new `GetQueryRuntimeStatistics`.
        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::GetQueryRuntimeStatistics,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetQueryRuntimeStatisticsError>,
        > {
            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::GetQueryRuntimeStatisticsOutput,
            aws_smithy_http::result::SdkError<crate::error::GetQueryRuntimeStatisticsError>,
        > {
            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 unique ID of the query execution.</p>
        pub fn query_execution_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.query_execution_id(input.into());
            self
        }
        /// <p>The unique ID of the query execution.</p>
        pub fn set_query_execution_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_query_execution_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetSession`.
    ///
    /// <p>Gets the full details of a previously created session, including the session status and configuration.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetSession {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_session_input::Builder,
    }
    impl GetSession {
        /// Creates a new `GetSession`.
        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::GetSession,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetSessionError>,
        > {
            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::GetSessionOutput,
            aws_smithy_http::result::SdkError<crate::error::GetSessionError>,
        > {
            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 session ID.</p>
        pub fn session_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.session_id(input.into());
            self
        }
        /// <p>The session ID.</p>
        pub fn set_session_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_session_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetSessionStatus`.
    ///
    /// <p>Gets the current status of a session.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetSessionStatus {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_session_status_input::Builder,
    }
    impl GetSessionStatus {
        /// Creates a new `GetSessionStatus`.
        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::GetSessionStatus,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetSessionStatusError>,
        > {
            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::GetSessionStatusOutput,
            aws_smithy_http::result::SdkError<crate::error::GetSessionStatusError>,
        > {
            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 session ID.</p>
        pub fn session_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.session_id(input.into());
            self
        }
        /// <p>The session ID.</p>
        pub fn set_session_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_session_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetTableMetadata`.
    ///
    /// <p>Returns table metadata for the specified catalog, database, and table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetTableMetadata {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_table_metadata_input::Builder,
    }
    impl GetTableMetadata {
        /// Creates a new `GetTableMetadata`.
        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::GetTableMetadata,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetTableMetadataError>,
        > {
            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::GetTableMetadataOutput,
            aws_smithy_http::result::SdkError<crate::error::GetTableMetadataError>,
        > {
            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 data catalog that contains the database and table metadata to return.</p>
        pub fn catalog_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.catalog_name(input.into());
            self
        }
        /// <p>The name of the data catalog that contains the database and table metadata to return.</p>
        pub fn set_catalog_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_catalog_name(input);
            self
        }
        /// <p>The name of the database that contains the table metadata to return.</p>
        pub fn database_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.database_name(input.into());
            self
        }
        /// <p>The name of the database that contains the table metadata to return.</p>
        pub fn set_database_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_database_name(input);
            self
        }
        /// <p>The name of the table for which metadata is returned.</p>
        pub fn table_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.table_name(input.into());
            self
        }
        /// <p>The name of the table for which metadata is returned.</p>
        pub fn set_table_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_table_name(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetWorkGroup`.
    ///
    /// <p>Returns information about the workgroup with the specified name.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetWorkGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_work_group_input::Builder,
    }
    impl GetWorkGroup {
        /// Creates a new `GetWorkGroup`.
        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::GetWorkGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetWorkGroupError>,
        > {
            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::GetWorkGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::GetWorkGroupError>,
        > {
            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 workgroup.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The name of the workgroup.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ImportNotebook`.
    ///
    /// <p>Imports a single <code>ipynb</code> file to a Spark enabled workgroup. The maximum file size that can be imported is 10 megabytes. If an <code>ipynb</code> file with the same name already exists in the workgroup, throws an error.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ImportNotebook {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::import_notebook_input::Builder,
    }
    impl ImportNotebook {
        /// Creates a new `ImportNotebook`.
        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::ImportNotebook,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ImportNotebookError>,
        > {
            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::ImportNotebookOutput,
            aws_smithy_http::result::SdkError<crate::error::ImportNotebookError>,
        > {
            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 Spark enabled workgroup to import the notebook to.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The name of the Spark enabled workgroup to import the notebook to.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
        /// <p>The name of the notebook to import.</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 notebook to import.</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 notebook content to be imported.</p>
        pub fn payload(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.payload(input.into());
            self
        }
        /// <p>The notebook content to be imported.</p>
        pub fn set_payload(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_payload(input);
            self
        }
        /// <p>The notebook content type. Currently, the only valid type is <code>IPYNB</code>.</p>
        pub fn r#type(mut self, input: crate::model::NotebookType) -> Self {
            self.inner = self.inner.r#type(input);
            self
        }
        /// <p>The notebook content type. Currently, the only valid type is <code>IPYNB</code>.</p>
        pub fn set_type(mut self, input: std::option::Option<crate::model::NotebookType>) -> Self {
            self.inner = self.inner.set_type(input);
            self
        }
        /// <p>A unique case-sensitive string used to ensure the request to import the notebook is idempotent (executes only once).</p> <important>
        /// <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for you. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>
        /// </important>
        pub fn client_request_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_request_token(input.into());
            self
        }
        /// <p>A unique case-sensitive string used to ensure the request to import the notebook is idempotent (executes only once).</p> <important>
        /// <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for you. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>
        /// </important>
        pub fn set_client_request_token(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_request_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListApplicationDPUSizes`.
    ///
    /// <p>Returns the supported DPU sizes for the supported application runtimes (for example, <code>Jupyter 1.0</code>). </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListApplicationDPUSizes {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_application_dpu_sizes_input::Builder,
    }
    impl ListApplicationDPUSizes {
        /// Creates a new `ListApplicationDPUSizes`.
        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::ListApplicationDPUSizes,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListApplicationDPUSizesError>,
        > {
            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::ListApplicationDpuSizesOutput,
            aws_smithy_http::result::SdkError<crate::error::ListApplicationDPUSizesError>,
        > {
            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::ListApplicationDpuSizesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListApplicationDpuSizesPaginator {
            crate::paginator::ListApplicationDpuSizesPaginator::new(self.handle, self.inner)
        }
        /// <p>Specifies the maximum number of results to return.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>Specifies the maximum number of results to return.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated.</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 `ListCalculationExecutions`.
    ///
    /// <p>Lists the calculations that have been submitted to a session in descending order. Newer calculations are listed first; older calculations are listed later.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListCalculationExecutions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_calculation_executions_input::Builder,
    }
    impl ListCalculationExecutions {
        /// Creates a new `ListCalculationExecutions`.
        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::ListCalculationExecutions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListCalculationExecutionsError>,
        > {
            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::ListCalculationExecutionsOutput,
            aws_smithy_http::result::SdkError<crate::error::ListCalculationExecutionsError>,
        > {
            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::ListCalculationExecutionsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListCalculationExecutionsPaginator {
            crate::paginator::ListCalculationExecutionsPaginator::new(self.handle, self.inner)
        }
        /// <p>The session ID.</p>
        pub fn session_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.session_id(input.into());
            self
        }
        /// <p>The session ID.</p>
        pub fn set_session_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_session_id(input);
            self
        }
        /// <p>A filter for a specific calculation execution state. A description of each state follows.</p>
        /// <p> <code>CREATING</code> - The calculation is in the process of being created.</p>
        /// <p> <code>CREATED</code> - The calculation has been created and is ready to run.</p>
        /// <p> <code>QUEUED</code> - The calculation has been queued for processing.</p>
        /// <p> <code>RUNNING</code> - The calculation is running.</p>
        /// <p> <code>CANCELING</code> - A request to cancel the calculation has been received and the system is working to stop it.</p>
        /// <p> <code>CANCELED</code> - The calculation is no longer running as the result of a cancel request.</p>
        /// <p> <code>COMPLETED</code> - The calculation has completed without error.</p>
        /// <p> <code>FAILED</code> - The calculation failed and is no longer running.</p>
        pub fn state_filter(mut self, input: crate::model::CalculationExecutionState) -> Self {
            self.inner = self.inner.state_filter(input);
            self
        }
        /// <p>A filter for a specific calculation execution state. A description of each state follows.</p>
        /// <p> <code>CREATING</code> - The calculation is in the process of being created.</p>
        /// <p> <code>CREATED</code> - The calculation has been created and is ready to run.</p>
        /// <p> <code>QUEUED</code> - The calculation has been queued for processing.</p>
        /// <p> <code>RUNNING</code> - The calculation is running.</p>
        /// <p> <code>CANCELING</code> - A request to cancel the calculation has been received and the system is working to stop it.</p>
        /// <p> <code>CANCELED</code> - The calculation is no longer running as the result of a cancel request.</p>
        /// <p> <code>COMPLETED</code> - The calculation has completed without error.</p>
        /// <p> <code>FAILED</code> - The calculation failed and is no longer running.</p>
        pub fn set_state_filter(
            mut self,
            input: std::option::Option<crate::model::CalculationExecutionState>,
        ) -> Self {
            self.inner = self.inner.set_state_filter(input);
            self
        }
        /// <p>The maximum number of calculation executions to return.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of calculation executions to return.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</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 `ListDatabases`.
    ///
    /// <p>Lists the databases in the specified data catalog.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListDatabases {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_databases_input::Builder,
    }
    impl ListDatabases {
        /// Creates a new `ListDatabases`.
        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::ListDatabases,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListDatabasesError>,
        > {
            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::ListDatabasesOutput,
            aws_smithy_http::result::SdkError<crate::error::ListDatabasesError>,
        > {
            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::ListDatabasesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListDatabasesPaginator {
            crate::paginator::ListDatabasesPaginator::new(self.handle, self.inner)
        }
        /// <p>The name of the data catalog that contains the databases to return.</p>
        pub fn catalog_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.catalog_name(input.into());
            self
        }
        /// <p>The name of the data catalog that contains the databases to return.</p>
        pub fn set_catalog_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_catalog_name(input);
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</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>Specifies the maximum number of results to return.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>Specifies the maximum number of results to return.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListDataCatalogs`.
    ///
    /// <p>Lists the data catalogs in the current Amazon Web Services account.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListDataCatalogs {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_data_catalogs_input::Builder,
    }
    impl ListDataCatalogs {
        /// Creates a new `ListDataCatalogs`.
        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::ListDataCatalogs,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListDataCatalogsError>,
        > {
            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::ListDataCatalogsOutput,
            aws_smithy_http::result::SdkError<crate::error::ListDataCatalogsError>,
        > {
            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::ListDataCatalogsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListDataCatalogsPaginator {
            crate::paginator::ListDataCatalogsPaginator::new(self.handle, self.inner)
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the NextToken from the response object of the previous page call.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the NextToken from the response object of the previous page call.</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>Specifies the maximum number of data catalogs to return.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>Specifies the maximum number of data catalogs to return.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListEngineVersions`.
    ///
    /// <p>Returns a list of engine versions that are available to choose from, including the Auto option.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListEngineVersions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_engine_versions_input::Builder,
    }
    impl ListEngineVersions {
        /// Creates a new `ListEngineVersions`.
        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::ListEngineVersions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListEngineVersionsError>,
        > {
            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::ListEngineVersionsOutput,
            aws_smithy_http::result::SdkError<crate::error::ListEngineVersionsError>,
        > {
            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::ListEngineVersionsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListEngineVersionsPaginator {
            crate::paginator::ListEngineVersionsPaginator::new(self.handle, self.inner)
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</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 engine versions to return in this request.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of engine versions to return in this request.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListExecutors`.
    ///
    /// <p>Lists, in descending order, the executors that have been submitted to a session. Newer executors are listed first; older executors are listed later. The result can be optionally filtered by state.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListExecutors {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_executors_input::Builder,
    }
    impl ListExecutors {
        /// Creates a new `ListExecutors`.
        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::ListExecutors,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListExecutorsError>,
        > {
            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::ListExecutorsOutput,
            aws_smithy_http::result::SdkError<crate::error::ListExecutorsError>,
        > {
            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::ListExecutorsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListExecutorsPaginator {
            crate::paginator::ListExecutorsPaginator::new(self.handle, self.inner)
        }
        /// <p>The session ID.</p>
        pub fn session_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.session_id(input.into());
            self
        }
        /// <p>The session ID.</p>
        pub fn set_session_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_session_id(input);
            self
        }
        /// <p>A filter for a specific executor state. A description of each state follows.</p>
        /// <p> <code>CREATING</code> - The executor is being started, including acquiring resources.</p>
        /// <p> <code>CREATED</code> - The executor has been started.</p>
        /// <p> <code>REGISTERED</code> - The executor has been registered.</p>
        /// <p> <code>TERMINATING</code> - The executor is in the process of shutting down.</p>
        /// <p> <code>TERMINATED</code> - The executor is no longer running.</p>
        /// <p> <code>FAILED</code> - Due to a failure, the executor is no longer running.</p>
        pub fn executor_state_filter(mut self, input: crate::model::ExecutorState) -> Self {
            self.inner = self.inner.executor_state_filter(input);
            self
        }
        /// <p>A filter for a specific executor state. A description of each state follows.</p>
        /// <p> <code>CREATING</code> - The executor is being started, including acquiring resources.</p>
        /// <p> <code>CREATED</code> - The executor has been started.</p>
        /// <p> <code>REGISTERED</code> - The executor has been registered.</p>
        /// <p> <code>TERMINATING</code> - The executor is in the process of shutting down.</p>
        /// <p> <code>TERMINATED</code> - The executor is no longer running.</p>
        /// <p> <code>FAILED</code> - Due to a failure, the executor is no longer running.</p>
        pub fn set_executor_state_filter(
            mut self,
            input: std::option::Option<crate::model::ExecutorState>,
        ) -> Self {
            self.inner = self.inner.set_executor_state_filter(input);
            self
        }
        /// <p>The maximum number of executors to return.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of executors to return.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</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 `ListNamedQueries`.
    ///
    /// <p>Provides a list of available query IDs only for queries saved in the specified workgroup. Requires that you have access to the specified workgroup. If a workgroup is not specified, lists the saved queries for the primary workgroup.</p>
    /// <p>For code samples using the Amazon Web Services SDK for Java, see <a href="http://docs.aws.amazon.com/athena/latest/ug/code-samples.html">Examples and Code Samples</a> in the <i>Amazon Athena User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListNamedQueries {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_named_queries_input::Builder,
    }
    impl ListNamedQueries {
        /// Creates a new `ListNamedQueries`.
        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::ListNamedQueries,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListNamedQueriesError>,
        > {
            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::ListNamedQueriesOutput,
            aws_smithy_http::result::SdkError<crate::error::ListNamedQueriesError>,
        > {
            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::ListNamedQueriesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListNamedQueriesPaginator {
            crate::paginator::ListNamedQueriesPaginator::new(self.handle, self.inner)
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</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 queries to return in this request.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of queries to return in this request.</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 name of the workgroup from which the named queries are being returned. If a workgroup is not specified, the saved queries for the primary workgroup are returned.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The name of the workgroup from which the named queries are being returned. If a workgroup is not specified, the saved queries for the primary workgroup are returned.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListNotebookMetadata`.
    ///
    /// <p>Displays the notebook files for the specified workgroup in paginated format.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListNotebookMetadata {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_notebook_metadata_input::Builder,
    }
    impl ListNotebookMetadata {
        /// Creates a new `ListNotebookMetadata`.
        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::ListNotebookMetadata,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListNotebookMetadataError>,
        > {
            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::ListNotebookMetadataOutput,
            aws_smithy_http::result::SdkError<crate::error::ListNotebookMetadataError>,
        > {
            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>Search filter string.</p>
        pub fn filters(mut self, input: crate::model::FilterDefinition) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>Search filter string.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<crate::model::FilterDefinition>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated.</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>Specifies the maximum number of results to return.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>Specifies the maximum number of results to return.</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 name of the Spark enabled workgroup to retrieve notebook metadata for.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The name of the Spark enabled workgroup to retrieve notebook metadata for.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListNotebookSessions`.
    ///
    /// <p>Lists, in descending order, the sessions that have been created in a notebook that are in an active state like <code>CREATING</code>, <code>CREATED</code>, <code>IDLE</code> or <code>BUSY</code>. Newer sessions are listed first; older sessions are listed later.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListNotebookSessions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_notebook_sessions_input::Builder,
    }
    impl ListNotebookSessions {
        /// Creates a new `ListNotebookSessions`.
        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::ListNotebookSessions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListNotebookSessionsError>,
        > {
            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::ListNotebookSessionsOutput,
            aws_smithy_http::result::SdkError<crate::error::ListNotebookSessionsError>,
        > {
            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 notebook to list sessions for.</p>
        pub fn notebook_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.notebook_id(input.into());
            self
        }
        /// <p>The ID of the notebook to list sessions for.</p>
        pub fn set_notebook_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_notebook_id(input);
            self
        }
        /// <p>The maximum number of notebook sessions to return.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of notebook sessions to return.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</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 `ListPreparedStatements`.
    ///
    /// <p>Lists the prepared statements in the specified workgroup.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListPreparedStatements {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_prepared_statements_input::Builder,
    }
    impl ListPreparedStatements {
        /// Creates a new `ListPreparedStatements`.
        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::ListPreparedStatements,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListPreparedStatementsError>,
        > {
            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::ListPreparedStatementsOutput,
            aws_smithy_http::result::SdkError<crate::error::ListPreparedStatementsError>,
        > {
            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::ListPreparedStatementsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListPreparedStatementsPaginator {
            crate::paginator::ListPreparedStatementsPaginator::new(self.handle, self.inner)
        }
        /// <p>The workgroup to list the prepared statements for.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The workgroup to list the prepared statements for.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</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 to return in this request.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results to return in this request.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListQueryExecutions`.
    ///
    /// <p>Provides a list of available query execution IDs for the queries in the specified workgroup. If a workgroup is not specified, returns a list of query execution IDs for the primary workgroup. Requires you to have access to the workgroup in which the queries ran.</p>
    /// <p>For code samples using the Amazon Web Services SDK for Java, see <a href="http://docs.aws.amazon.com/athena/latest/ug/code-samples.html">Examples and Code Samples</a> in the <i>Amazon Athena User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListQueryExecutions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_query_executions_input::Builder,
    }
    impl ListQueryExecutions {
        /// Creates a new `ListQueryExecutions`.
        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::ListQueryExecutions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListQueryExecutionsError>,
        > {
            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::ListQueryExecutionsOutput,
            aws_smithy_http::result::SdkError<crate::error::ListQueryExecutionsError>,
        > {
            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::ListQueryExecutionsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListQueryExecutionsPaginator {
            crate::paginator::ListQueryExecutionsPaginator::new(self.handle, self.inner)
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</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 query executions to return in this request.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of query executions to return in this request.</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 name of the workgroup from which queries are being returned. If a workgroup is not specified, a list of available query execution IDs for the queries in the primary workgroup is returned.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The name of the workgroup from which queries are being returned. If a workgroup is not specified, a list of available query execution IDs for the queries in the primary workgroup is returned.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListSessions`.
    ///
    /// <p>Lists the sessions in a workgroup that are in an active state like <code>CREATING</code>, <code>CREATED</code>, <code>IDLE</code>, or <code>BUSY</code>. Newer sessions are listed first; older sessions are listed later.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListSessions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_sessions_input::Builder,
    }
    impl ListSessions {
        /// Creates a new `ListSessions`.
        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::ListSessions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListSessionsError>,
        > {
            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::ListSessionsOutput,
            aws_smithy_http::result::SdkError<crate::error::ListSessionsError>,
        > {
            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::ListSessionsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListSessionsPaginator {
            crate::paginator::ListSessionsPaginator::new(self.handle, self.inner)
        }
        /// <p>The workgroup to which the session belongs.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The workgroup to which the session belongs.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
        /// <p>A filter for a specific session state. A description of each state follows.</p>
        /// <p> <code>CREATING</code> - The session is being started, including acquiring resources.</p>
        /// <p> <code>CREATED</code> - The session has been started.</p>
        /// <p> <code>IDLE</code> - The session is able to accept a calculation.</p>
        /// <p> <code>BUSY</code> - The session is processing another task and is unable to accept a calculation.</p>
        /// <p> <code>TERMINATING</code> - The session is in the process of shutting down.</p>
        /// <p> <code>TERMINATED</code> - The session and its resources are no longer running.</p>
        /// <p> <code>DEGRADED</code> - The session has no healthy coordinators.</p>
        /// <p> <code>FAILED</code> - Due to a failure, the session and its resources are no longer running.</p>
        pub fn state_filter(mut self, input: crate::model::SessionState) -> Self {
            self.inner = self.inner.state_filter(input);
            self
        }
        /// <p>A filter for a specific session state. A description of each state follows.</p>
        /// <p> <code>CREATING</code> - The session is being started, including acquiring resources.</p>
        /// <p> <code>CREATED</code> - The session has been started.</p>
        /// <p> <code>IDLE</code> - The session is able to accept a calculation.</p>
        /// <p> <code>BUSY</code> - The session is processing another task and is unable to accept a calculation.</p>
        /// <p> <code>TERMINATING</code> - The session is in the process of shutting down.</p>
        /// <p> <code>TERMINATED</code> - The session and its resources are no longer running.</p>
        /// <p> <code>DEGRADED</code> - The session has no healthy coordinators.</p>
        /// <p> <code>FAILED</code> - Due to a failure, the session and its resources are no longer running.</p>
        pub fn set_state_filter(
            mut self,
            input: std::option::Option<crate::model::SessionState>,
        ) -> Self {
            self.inner = self.inner.set_state_filter(input);
            self
        }
        /// <p>The maximum number of sessions to return.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of sessions to return.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</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 `ListTableMetadata`.
    ///
    /// <p>Lists the metadata for the tables in the specified data catalog database.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListTableMetadata {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_table_metadata_input::Builder,
    }
    impl ListTableMetadata {
        /// Creates a new `ListTableMetadata`.
        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::ListTableMetadata,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListTableMetadataError>,
        > {
            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::ListTableMetadataOutput,
            aws_smithy_http::result::SdkError<crate::error::ListTableMetadataError>,
        > {
            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::ListTableMetadataPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListTableMetadataPaginator {
            crate::paginator::ListTableMetadataPaginator::new(self.handle, self.inner)
        }
        /// <p>The name of the data catalog for which table metadata should be returned.</p>
        pub fn catalog_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.catalog_name(input.into());
            self
        }
        /// <p>The name of the data catalog for which table metadata should be returned.</p>
        pub fn set_catalog_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_catalog_name(input);
            self
        }
        /// <p>The name of the database for which table metadata should be returned.</p>
        pub fn database_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.database_name(input.into());
            self
        }
        /// <p>The name of the database for which table metadata should be returned.</p>
        pub fn set_database_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_database_name(input);
            self
        }
        /// <p>A regex filter that pattern-matches table names. If no expression is supplied, metadata for all tables are listed.</p>
        pub fn expression(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.expression(input.into());
            self
        }
        /// <p>A regex filter that pattern-matches table names. If no expression is supplied, metadata for all tables are listed.</p>
        pub fn set_expression(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_expression(input);
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the NextToken from the response object of the previous page call.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the NextToken from the response object of the previous page call.</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>Specifies the maximum number of results to return.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>Specifies the maximum number of results to return.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListTagsForResource`.
    ///
    /// <p>Lists the tags associated with an Athena workgroup or data catalog 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
        }
        /// Create a paginator for this request
        ///
        /// Paginators are used by calling [`send().await`](crate::paginator::ListTagsForResourcePaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListTagsForResourcePaginator {
            crate::paginator::ListTagsForResourcePaginator::new(self.handle, self.inner)
        }
        /// <p>Lists the tags for the resource with the specified ARN.</p>
        pub fn resource_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource_arn(input.into());
            self
        }
        /// <p>Lists the tags for the resource with the specified ARN.</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
        }
        /// <p>The token for the next set of results, or null if there are no additional results for this request, where the request lists the tags for the resource with the specified ARN.</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 token for the next set of results, or null if there are no additional results for this request, where the request lists the tags for the resource with the specified ARN.</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 to be returned per request that lists the tags for the resource.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results to be returned per request that lists the tags for the resource.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListWorkGroups`.
    ///
    /// <p>Lists available workgroups for the account.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListWorkGroups {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_work_groups_input::Builder,
    }
    impl ListWorkGroups {
        /// Creates a new `ListWorkGroups`.
        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::ListWorkGroups,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListWorkGroupsError>,
        > {
            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::ListWorkGroupsOutput,
            aws_smithy_http::result::SdkError<crate::error::ListWorkGroupsError>,
        > {
            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::ListWorkGroupsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListWorkGroupsPaginator {
            crate::paginator::ListWorkGroupsPaginator::new(self.handle, self.inner)
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>A token generated by the Athena service that specifies where to continue pagination if a previous request was truncated. To obtain the next set of pages, pass in the <code>NextToken</code> from the response object of the previous page call.</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 workgroups to return in this request.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of workgroups to return in this request.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
    }
    /// Fluent builder constructing a request to `StartCalculationExecution`.
    ///
    /// <p>Submits calculations for execution within a session. You can supply the code to run as an inline code block within the request or as an Amazon S3 URL.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct StartCalculationExecution {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::start_calculation_execution_input::Builder,
    }
    impl StartCalculationExecution {
        /// Creates a new `StartCalculationExecution`.
        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::StartCalculationExecution,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::StartCalculationExecutionError>,
        > {
            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::StartCalculationExecutionOutput,
            aws_smithy_http::result::SdkError<crate::error::StartCalculationExecutionError>,
        > {
            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 session ID.</p>
        pub fn session_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.session_id(input.into());
            self
        }
        /// <p>The session ID.</p>
        pub fn set_session_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_session_id(input);
            self
        }
        /// <p>A description of the calculation.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description of the calculation.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Contains configuration information for the calculation.</p>
        #[deprecated(note = "Kepler Post GA Tasks : https://sim.amazon.com/issues/ATHENA-39828")]
        pub fn calculation_configuration(
            mut self,
            input: crate::model::CalculationConfiguration,
        ) -> Self {
            self.inner = self.inner.calculation_configuration(input);
            self
        }
        /// <p>Contains configuration information for the calculation.</p>
        #[deprecated(note = "Kepler Post GA Tasks : https://sim.amazon.com/issues/ATHENA-39828")]
        pub fn set_calculation_configuration(
            mut self,
            input: std::option::Option<crate::model::CalculationConfiguration>,
        ) -> Self {
            self.inner = self.inner.set_calculation_configuration(input);
            self
        }
        /// <p>A string that contains the code of the calculation.</p>
        pub fn code_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.code_block(input.into());
            self
        }
        /// <p>A string that contains the code of the calculation.</p>
        pub fn set_code_block(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_code_block(input);
            self
        }
        /// <p>A unique case-sensitive string used to ensure the request to create the calculation is idempotent (executes only once). If another <code>StartCalculationExecutionRequest</code> is received, the same response is returned and another calculation is not created. If a parameter has changed, an error is returned.</p> <important>
        /// <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for users. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>
        /// </important>
        pub fn client_request_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_request_token(input.into());
            self
        }
        /// <p>A unique case-sensitive string used to ensure the request to create the calculation is idempotent (executes only once). If another <code>StartCalculationExecutionRequest</code> is received, the same response is returned and another calculation is not created. If a parameter has changed, an error is returned.</p> <important>
        /// <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for users. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>
        /// </important>
        pub fn set_client_request_token(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_request_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `StartQueryExecution`.
    ///
    /// <p>Runs the SQL query statements contained in the <code>Query</code>. Requires you to have access to the workgroup in which the query ran. Running queries against an external catalog requires <code>GetDataCatalog</code> permission to the catalog. For code samples using the Amazon Web Services SDK for Java, see <a href="http://docs.aws.amazon.com/athena/latest/ug/code-samples.html">Examples and Code Samples</a> in the <i>Amazon Athena User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct StartQueryExecution {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::start_query_execution_input::Builder,
    }
    impl StartQueryExecution {
        /// Creates a new `StartQueryExecution`.
        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::StartQueryExecution,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::StartQueryExecutionError>,
        > {
            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::StartQueryExecutionOutput,
            aws_smithy_http::result::SdkError<crate::error::StartQueryExecutionError>,
        > {
            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 SQL query statements to be executed.</p>
        pub fn query_string(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.query_string(input.into());
            self
        }
        /// <p>The SQL query statements to be executed.</p>
        pub fn set_query_string(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_query_string(input);
            self
        }
        /// <p>A unique case-sensitive string used to ensure the request to create the query is idempotent (executes only once). If another <code>StartQueryExecution</code> request is received, the same response is returned and another query is not created. If a parameter has changed, for example, the <code>QueryString</code>, an error is returned.</p> <important>
        /// <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for users. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>
        /// </important>
        pub fn client_request_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_request_token(input.into());
            self
        }
        /// <p>A unique case-sensitive string used to ensure the request to create the query is idempotent (executes only once). If another <code>StartQueryExecution</code> request is received, the same response is returned and another query is not created. If a parameter has changed, for example, the <code>QueryString</code>, an error is returned.</p> <important>
        /// <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for users. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>
        /// </important>
        pub fn set_client_request_token(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_request_token(input);
            self
        }
        /// <p>The database within which the query executes.</p>
        pub fn query_execution_context(
            mut self,
            input: crate::model::QueryExecutionContext,
        ) -> Self {
            self.inner = self.inner.query_execution_context(input);
            self
        }
        /// <p>The database within which the query executes.</p>
        pub fn set_query_execution_context(
            mut self,
            input: std::option::Option<crate::model::QueryExecutionContext>,
        ) -> Self {
            self.inner = self.inner.set_query_execution_context(input);
            self
        }
        /// <p>Specifies information about where and how to save the results of the query execution. If the query runs in a workgroup, then workgroup's settings may override query settings. This affects the query results location. The workgroup settings override is specified in EnforceWorkGroupConfiguration (true/false) in the WorkGroupConfiguration. See <code>WorkGroupConfiguration$EnforceWorkGroupConfiguration</code>.</p>
        pub fn result_configuration(mut self, input: crate::model::ResultConfiguration) -> Self {
            self.inner = self.inner.result_configuration(input);
            self
        }
        /// <p>Specifies information about where and how to save the results of the query execution. If the query runs in a workgroup, then workgroup's settings may override query settings. This affects the query results location. The workgroup settings override is specified in EnforceWorkGroupConfiguration (true/false) in the WorkGroupConfiguration. See <code>WorkGroupConfiguration$EnforceWorkGroupConfiguration</code>.</p>
        pub fn set_result_configuration(
            mut self,
            input: std::option::Option<crate::model::ResultConfiguration>,
        ) -> Self {
            self.inner = self.inner.set_result_configuration(input);
            self
        }
        /// <p>The name of the workgroup in which the query is being started.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The name of the workgroup in which the query is being started.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
        /// Appends an item to `ExecutionParameters`.
        ///
        /// To override the contents of this collection use [`set_execution_parameters`](Self::set_execution_parameters).
        ///
        /// <p>A list of values for the parameters in a query. The values are applied sequentially to the parameters in the query in the order in which the parameters occur.</p>
        pub fn execution_parameters(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.execution_parameters(input.into());
            self
        }
        /// <p>A list of values for the parameters in a query. The values are applied sequentially to the parameters in the query in the order in which the parameters occur.</p>
        pub fn set_execution_parameters(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_execution_parameters(input);
            self
        }
        /// <p>Specifies the query result reuse behavior for the query.</p>
        pub fn result_reuse_configuration(
            mut self,
            input: crate::model::ResultReuseConfiguration,
        ) -> Self {
            self.inner = self.inner.result_reuse_configuration(input);
            self
        }
        /// <p>Specifies the query result reuse behavior for the query.</p>
        pub fn set_result_reuse_configuration(
            mut self,
            input: std::option::Option<crate::model::ResultReuseConfiguration>,
        ) -> Self {
            self.inner = self.inner.set_result_reuse_configuration(input);
            self
        }
    }
    /// Fluent builder constructing a request to `StartSession`.
    ///
    /// <p>Creates a session for running calculations within a workgroup. The session is ready when it reaches an <code>IDLE</code> state.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct StartSession {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::start_session_input::Builder,
    }
    impl StartSession {
        /// Creates a new `StartSession`.
        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::StartSession,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::StartSessionError>,
        > {
            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::StartSessionOutput,
            aws_smithy_http::result::SdkError<crate::error::StartSessionError>,
        > {
            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 session description.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The session description.</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 workgroup to which the session belongs.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The workgroup to which the session belongs.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
        /// <p>Contains engine data processing unit (DPU) configuration settings and parameter mappings.</p>
        pub fn engine_configuration(mut self, input: crate::model::EngineConfiguration) -> Self {
            self.inner = self.inner.engine_configuration(input);
            self
        }
        /// <p>Contains engine data processing unit (DPU) configuration settings and parameter mappings.</p>
        pub fn set_engine_configuration(
            mut self,
            input: std::option::Option<crate::model::EngineConfiguration>,
        ) -> Self {
            self.inner = self.inner.set_engine_configuration(input);
            self
        }
        /// <p>The notebook version. This value is required only when requesting that a notebook server be started for the session. The only valid notebook version is <code>Jupyter1.0</code>.</p>
        pub fn notebook_version(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.notebook_version(input.into());
            self
        }
        /// <p>The notebook version. This value is required only when requesting that a notebook server be started for the session. The only valid notebook version is <code>Jupyter1.0</code>.</p>
        pub fn set_notebook_version(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_notebook_version(input);
            self
        }
        /// <p>The idle timeout in minutes for the session.</p>
        pub fn session_idle_timeout_in_minutes(mut self, input: i32) -> Self {
            self.inner = self.inner.session_idle_timeout_in_minutes(input);
            self
        }
        /// <p>The idle timeout in minutes for the session.</p>
        pub fn set_session_idle_timeout_in_minutes(
            mut self,
            input: std::option::Option<i32>,
        ) -> Self {
            self.inner = self.inner.set_session_idle_timeout_in_minutes(input);
            self
        }
        /// <p>A unique case-sensitive string used to ensure the request to create the session is idempotent (executes only once). If another <code>StartSessionRequest</code> is received, the same response is returned and another session is not created. If a parameter has changed, an error is returned.</p> <important>
        /// <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for users. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>
        /// </important>
        pub fn client_request_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_request_token(input.into());
            self
        }
        /// <p>A unique case-sensitive string used to ensure the request to create the session is idempotent (executes only once). If another <code>StartSessionRequest</code> is received, the same response is returned and another session is not created. If a parameter has changed, an error is returned.</p> <important>
        /// <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for users. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>
        /// </important>
        pub fn set_client_request_token(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_request_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `StopCalculationExecution`.
    ///
    /// <p>Requests the cancellation of a calculation. A <code>StopCalculationExecution</code> call on a calculation that is already in a terminal state (for example, <code>STOPPED</code>, <code>FAILED</code>, or <code>COMPLETED</code>) succeeds but has no effect.</p> <note>
    /// <p>Cancelling a calculation is done on a best effort basis. If a calculation cannot be cancelled, you can be charged for its completion. If you are concerned about being charged for a calculation that cannot be cancelled, consider terminating the session in which the calculation is running.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct StopCalculationExecution {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::stop_calculation_execution_input::Builder,
    }
    impl StopCalculationExecution {
        /// Creates a new `StopCalculationExecution`.
        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::StopCalculationExecution,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::StopCalculationExecutionError>,
        > {
            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::StopCalculationExecutionOutput,
            aws_smithy_http::result::SdkError<crate::error::StopCalculationExecutionError>,
        > {
            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 calculation execution UUID.</p>
        pub fn calculation_execution_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.calculation_execution_id(input.into());
            self
        }
        /// <p>The calculation execution UUID.</p>
        pub fn set_calculation_execution_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_calculation_execution_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `StopQueryExecution`.
    ///
    /// <p>Stops a query execution. Requires you to have access to the workgroup in which the query ran.</p>
    /// <p>For code samples using the Amazon Web Services SDK for Java, see <a href="http://docs.aws.amazon.com/athena/latest/ug/code-samples.html">Examples and Code Samples</a> in the <i>Amazon Athena User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct StopQueryExecution {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::stop_query_execution_input::Builder,
    }
    impl StopQueryExecution {
        /// Creates a new `StopQueryExecution`.
        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::StopQueryExecution,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::StopQueryExecutionError>,
        > {
            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::StopQueryExecutionOutput,
            aws_smithy_http::result::SdkError<crate::error::StopQueryExecutionError>,
        > {
            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 unique ID of the query execution to stop.</p>
        pub fn query_execution_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.query_execution_id(input.into());
            self
        }
        /// <p>The unique ID of the query execution to stop.</p>
        pub fn set_query_execution_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_query_execution_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `TagResource`.
    ///
    /// <p>Adds one or more tags to an Athena resource. A tag is a label that you assign to a resource. In Athena, a resource can be a workgroup or data catalog. Each tag consists of a key and an optional value, both of which you define. For example, you can use tags to categorize Athena workgroups or data catalogs by purpose, owner, or environment. Use a consistent set of tag keys to make it easier to search and filter workgroups or data catalogs in your account. For best practices, see <a href="https://aws.amazon.com/answers/account-management/aws-tagging-strategies/">Tagging Best Practices</a>. Tag keys can be from 1 to 128 UTF-8 Unicode characters, and tag values can be from 0 to 256 UTF-8 Unicode characters. Tags can use letters and numbers representable in UTF-8, and the following characters: + - = . _ : / @. Tag keys and values are case-sensitive. Tag keys must be unique per resource. If you specify more than one tag, separate them by commas.</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>Specifies the ARN of the Athena resource (workgroup or data catalog) to which tags are to be added.</p>
        pub fn resource_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource_arn(input.into());
            self
        }
        /// <p>Specifies the ARN of the Athena resource (workgroup or data catalog) to which tags are to be added.</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 `Tags`.
        ///
        /// To override the contents of this collection use [`set_tags`](Self::set_tags).
        ///
        /// <p>A collection of one or more tags, separated by commas, to be added to an Athena workgroup or data catalog resource.</p>
        pub fn tags(mut self, input: crate::model::Tag) -> Self {
            self.inner = self.inner.tags(input);
            self
        }
        /// <p>A collection of one or more tags, separated by commas, to be added to an Athena workgroup or data catalog resource.</p>
        pub fn set_tags(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Tag>>,
        ) -> Self {
            self.inner = self.inner.set_tags(input);
            self
        }
    }
    /// Fluent builder constructing a request to `TerminateSession`.
    ///
    /// <p>Terminates an active session. A <code>TerminateSession</code> call on a session that is already inactive (for example, in a <code>FAILED</code>, <code>TERMINATED</code> or <code>TERMINATING</code> state) succeeds but has no effect. Calculations running in the session when <code>TerminateSession</code> is called are forcefully stopped, but may display as <code>FAILED</code> instead of <code>STOPPED</code>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct TerminateSession {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::terminate_session_input::Builder,
    }
    impl TerminateSession {
        /// Creates a new `TerminateSession`.
        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::TerminateSession,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::TerminateSessionError>,
        > {
            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::TerminateSessionOutput,
            aws_smithy_http::result::SdkError<crate::error::TerminateSessionError>,
        > {
            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 session ID.</p>
        pub fn session_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.session_id(input.into());
            self
        }
        /// <p>The session ID.</p>
        pub fn set_session_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_session_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `UntagResource`.
    ///
    /// <p>Removes one or more tags from a data catalog or workgroup 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>Specifies the ARN of the resource from which tags are to be removed.</p>
        pub fn resource_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource_arn(input.into());
            self
        }
        /// <p>Specifies the ARN of the resource from which tags are to be removed.</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>A comma-separated list of one or more tag keys whose tags are to be removed from the specified resource.</p>
        pub fn tag_keys(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.tag_keys(input.into());
            self
        }
        /// <p>A comma-separated list of one or more tag keys whose tags are to be removed from the specified resource.</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 `UpdateDataCatalog`.
    ///
    /// <p>Updates the data catalog that has the specified name.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct UpdateDataCatalog {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::update_data_catalog_input::Builder,
    }
    impl UpdateDataCatalog {
        /// Creates a new `UpdateDataCatalog`.
        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::UpdateDataCatalog,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::UpdateDataCatalogError>,
        > {
            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::UpdateDataCatalogOutput,
            aws_smithy_http::result::SdkError<crate::error::UpdateDataCatalogError>,
        > {
            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 data catalog to update. The catalog name must be unique for the Amazon Web Services account and can use a maximum of 127 alphanumeric, underscore, at sign, or hyphen characters. The remainder of the length constraint of 256 is reserved for use by Athena.</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 data catalog to update. The catalog name must be unique for the Amazon Web Services account and can use a maximum of 127 alphanumeric, underscore, at sign, or hyphen characters. The remainder of the length constraint of 256 is reserved for use by Athena.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
        /// <p>Specifies the type of data catalog to update. Specify <code>LAMBDA</code> for a federated catalog, <code>HIVE</code> for an external hive metastore, or <code>GLUE</code> for an Glue Data Catalog.</p>
        pub fn r#type(mut self, input: crate::model::DataCatalogType) -> Self {
            self.inner = self.inner.r#type(input);
            self
        }
        /// <p>Specifies the type of data catalog to update. Specify <code>LAMBDA</code> for a federated catalog, <code>HIVE</code> for an external hive metastore, or <code>GLUE</code> for an Glue Data Catalog.</p>
        pub fn set_type(
            mut self,
            input: std::option::Option<crate::model::DataCatalogType>,
        ) -> Self {
            self.inner = self.inner.set_type(input);
            self
        }
        /// <p>New or modified text that describes the data catalog.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>New or modified text that describes the data catalog.</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 `Parameters`.
        ///
        /// To override the contents of this collection use [`set_parameters`](Self::set_parameters).
        ///
        /// <p>Specifies the Lambda function or functions to use for updating the data catalog. This is a mapping whose values depend on the catalog type. </p>
        /// <ul>
        /// <li> <p>For the <code>HIVE</code> data catalog type, use the following syntax. The <code>metadata-function</code> parameter is required. <code>The sdk-version</code> parameter is optional and defaults to the currently supported version.</p> <p> <code>metadata-function=<i>lambda_arn</i>, sdk-version=<i>version_number</i> </code> </p> </li>
        /// <li> <p>For the <code>LAMBDA</code> data catalog type, use one of the following sets of required parameters, but not both.</p>
        /// <ul>
        /// <li> <p>If you have one Lambda function that processes metadata and another for reading the actual data, use the following syntax. Both parameters are required.</p> <p> <code>metadata-function=<i>lambda_arn</i>, record-function=<i>lambda_arn</i> </code> </p> </li>
        /// <li> <p> If you have a composite Lambda function that processes both metadata and data, use the following syntax to specify your Lambda function.</p> <p> <code>function=<i>lambda_arn</i> </code> </p> </li>
        /// </ul> </li>
        /// </ul>
        pub fn parameters(
            mut self,
            k: impl Into<std::string::String>,
            v: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.parameters(k.into(), v.into());
            self
        }
        /// <p>Specifies the Lambda function or functions to use for updating the data catalog. This is a mapping whose values depend on the catalog type. </p>
        /// <ul>
        /// <li> <p>For the <code>HIVE</code> data catalog type, use the following syntax. The <code>metadata-function</code> parameter is required. <code>The sdk-version</code> parameter is optional and defaults to the currently supported version.</p> <p> <code>metadata-function=<i>lambda_arn</i>, sdk-version=<i>version_number</i> </code> </p> </li>
        /// <li> <p>For the <code>LAMBDA</code> data catalog type, use one of the following sets of required parameters, but not both.</p>
        /// <ul>
        /// <li> <p>If you have one Lambda function that processes metadata and another for reading the actual data, use the following syntax. Both parameters are required.</p> <p> <code>metadata-function=<i>lambda_arn</i>, record-function=<i>lambda_arn</i> </code> </p> </li>
        /// <li> <p> If you have a composite Lambda function that processes both metadata and data, use the following syntax to specify your Lambda function.</p> <p> <code>function=<i>lambda_arn</i> </code> </p> </li>
        /// </ul> </li>
        /// </ul>
        pub fn set_parameters(
            mut self,
            input: std::option::Option<
                std::collections::HashMap<std::string::String, std::string::String>,
            >,
        ) -> Self {
            self.inner = self.inner.set_parameters(input);
            self
        }
    }
    /// Fluent builder constructing a request to `UpdateNamedQuery`.
    ///
    /// <p>Updates a <code>NamedQuery</code> object. The database or workgroup cannot be updated.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct UpdateNamedQuery {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::update_named_query_input::Builder,
    }
    impl UpdateNamedQuery {
        /// Creates a new `UpdateNamedQuery`.
        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::UpdateNamedQuery,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::UpdateNamedQueryError>,
        > {
            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::UpdateNamedQueryOutput,
            aws_smithy_http::result::SdkError<crate::error::UpdateNamedQueryError>,
        > {
            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 unique identifier (UUID) of the query.</p>
        pub fn named_query_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.named_query_id(input.into());
            self
        }
        /// <p>The unique identifier (UUID) of the query.</p>
        pub fn set_named_query_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_named_query_id(input);
            self
        }
        /// <p>The name of the query.</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 query.</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 query description.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The query description.</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 contents of the query with all query statements.</p>
        pub fn query_string(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.query_string(input.into());
            self
        }
        /// <p>The contents of the query with all query statements.</p>
        pub fn set_query_string(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_query_string(input);
            self
        }
    }
    /// Fluent builder constructing a request to `UpdateNotebook`.
    ///
    /// <p>Updates the contents of a Spark notebook.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct UpdateNotebook {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::update_notebook_input::Builder,
    }
    impl UpdateNotebook {
        /// Creates a new `UpdateNotebook`.
        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::UpdateNotebook,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::UpdateNotebookError>,
        > {
            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::UpdateNotebookOutput,
            aws_smithy_http::result::SdkError<crate::error::UpdateNotebookError>,
        > {
            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 notebook to update.</p>
        pub fn notebook_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.notebook_id(input.into());
            self
        }
        /// <p>The ID of the notebook to update.</p>
        pub fn set_notebook_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_notebook_id(input);
            self
        }
        /// <p>The updated content for the notebook.</p>
        pub fn payload(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.payload(input.into());
            self
        }
        /// <p>The updated content for the notebook.</p>
        pub fn set_payload(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_payload(input);
            self
        }
        /// <p>The notebook content type. Currently, the only valid type is <code>IPYNB</code>.</p>
        pub fn r#type(mut self, input: crate::model::NotebookType) -> Self {
            self.inner = self.inner.r#type(input);
            self
        }
        /// <p>The notebook content type. Currently, the only valid type is <code>IPYNB</code>.</p>
        pub fn set_type(mut self, input: std::option::Option<crate::model::NotebookType>) -> Self {
            self.inner = self.inner.set_type(input);
            self
        }
        /// <p>The ID of the session in which the notebook will be updated.</p>
        pub fn session_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.session_id(input.into());
            self
        }
        /// <p>The ID of the session in which the notebook will be updated.</p>
        pub fn set_session_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_session_id(input);
            self
        }
        /// <p>A unique case-sensitive string used to ensure the request to create the notebook is idempotent (executes only once).</p> <important>
        /// <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for you. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>
        /// </important>
        pub fn client_request_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_request_token(input.into());
            self
        }
        /// <p>A unique case-sensitive string used to ensure the request to create the notebook is idempotent (executes only once).</p> <important>
        /// <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for you. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>
        /// </important>
        pub fn set_client_request_token(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_request_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `UpdateNotebookMetadata`.
    ///
    /// <p>Updates the metadata for a notebook.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct UpdateNotebookMetadata {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::update_notebook_metadata_input::Builder,
    }
    impl UpdateNotebookMetadata {
        /// Creates a new `UpdateNotebookMetadata`.
        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::UpdateNotebookMetadata,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::UpdateNotebookMetadataError>,
        > {
            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::UpdateNotebookMetadataOutput,
            aws_smithy_http::result::SdkError<crate::error::UpdateNotebookMetadataError>,
        > {
            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 notebook to update the metadata for.</p>
        pub fn notebook_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.notebook_id(input.into());
            self
        }
        /// <p>The ID of the notebook to update the metadata for.</p>
        pub fn set_notebook_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_notebook_id(input);
            self
        }
        /// <p>A unique case-sensitive string used to ensure the request to create the notebook is idempotent (executes only once).</p> <important>
        /// <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for you. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>
        /// </important>
        pub fn client_request_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_request_token(input.into());
            self
        }
        /// <p>A unique case-sensitive string used to ensure the request to create the notebook is idempotent (executes only once).</p> <important>
        /// <p>This token is listed as not required because Amazon Web Services SDKs (for example the Amazon Web Services SDK for Java) auto-generate the token for you. If you are not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide this token or the action will fail.</p>
        /// </important>
        pub fn set_client_request_token(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_request_token(input);
            self
        }
        /// <p>The name to update the notebook to.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>The name to update the notebook to.</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 `UpdatePreparedStatement`.
    ///
    /// <p>Updates a prepared statement.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct UpdatePreparedStatement {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::update_prepared_statement_input::Builder,
    }
    impl UpdatePreparedStatement {
        /// Creates a new `UpdatePreparedStatement`.
        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::UpdatePreparedStatement,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::UpdatePreparedStatementError>,
        > {
            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::UpdatePreparedStatementOutput,
            aws_smithy_http::result::SdkError<crate::error::UpdatePreparedStatementError>,
        > {
            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 prepared statement.</p>
        pub fn statement_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.statement_name(input.into());
            self
        }
        /// <p>The name of the prepared statement.</p>
        pub fn set_statement_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_statement_name(input);
            self
        }
        /// <p>The workgroup for the prepared statement.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The workgroup for the prepared statement.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
        /// <p>The query string for the prepared statement.</p>
        pub fn query_statement(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.query_statement(input.into());
            self
        }
        /// <p>The query string for the prepared statement.</p>
        pub fn set_query_statement(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_query_statement(input);
            self
        }
        /// <p>The description of the prepared statement.</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 prepared statement.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
    }
    /// Fluent builder constructing a request to `UpdateWorkGroup`.
    ///
    /// <p>Updates the workgroup with the specified name. The workgroup's name cannot be changed. Only one of <code>ConfigurationsUpdates</code> or <code>ConfigurationUpdates</code> can be specified; <code>ConfigurationsUpdates</code> for a workgroup with multi engine support (for example, an Apache Spark enabled workgroup) or <code>ConfigurationUpdates</code> for an Athena SQL workgroup.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct UpdateWorkGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::update_work_group_input::Builder,
    }
    impl UpdateWorkGroup {
        /// Creates a new `UpdateWorkGroup`.
        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::UpdateWorkGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::UpdateWorkGroupError>,
        > {
            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::UpdateWorkGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::UpdateWorkGroupError>,
        > {
            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 specified workgroup that will be updated.</p>
        pub fn work_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.work_group(input.into());
            self
        }
        /// <p>The specified workgroup that will be updated.</p>
        pub fn set_work_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_work_group(input);
            self
        }
        /// <p>The workgroup description.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The workgroup description.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Contains configuration updates for an Athena SQL workgroup.</p>
        pub fn configuration_updates(
            mut self,
            input: crate::model::WorkGroupConfigurationUpdates,
        ) -> Self {
            self.inner = self.inner.configuration_updates(input);
            self
        }
        /// <p>Contains configuration updates for an Athena SQL workgroup.</p>
        pub fn set_configuration_updates(
            mut self,
            input: std::option::Option<crate::model::WorkGroupConfigurationUpdates>,
        ) -> Self {
            self.inner = self.inner.set_configuration_updates(input);
            self
        }
        /// <p>The workgroup state that will be updated for the given workgroup.</p>
        pub fn state(mut self, input: crate::model::WorkGroupState) -> Self {
            self.inner = self.inner.state(input);
            self
        }
        /// <p>The workgroup state that will be updated for the given workgroup.</p>
        pub fn set_state(
            mut self,
            input: std::option::Option<crate::model::WorkGroupState>,
        ) -> Self {
            self.inner = self.inner.set_state(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 }),
        }
    }
}